当前位置: 首页 > news >正文

Linux系统调优和工具

Linux系统调优和问题定位需要掌握一系列强大的工具,涵盖系统监控、性能分析、故障排查等多个方面。以下是一些核心工具和它们的典型应用场景,分类整理如下:

一、系统资源监控(实时概览)

  1. top / htop

    • 功能: 实时动态查看系统整体性能指标(CPU、内存、Swap、负载)和进程资源占用(CPU%、MEM%、状态、命令)。
    • 用途: 快速识别资源消耗大户(CPU、内存)、僵尸进程、系统负载情况。htoptop的增强版,支持颜色、鼠标操作、树状视图、更友好的界面。
    • 常用命令:
      • top (进入后按P按CPU排序,M按内存排序,1显示所有CPU核心)
      • htop
  2. vmstat

    • 功能: 报告虚拟内存统计信息、进程、块IO、中断、CPU活动。
    • 用途: 快速查看系统整体瓶颈方向(CPU等待io wa值高表示IO瓶颈,r队列长表示CPU饱和,si/so高表示内存不足触发Swap交换)。
    • 常用命令: vmstat 1 (每秒刷新一次)
  3. dstat

    • 功能: 全能系统资源统计工具,整合了vmstat, iostat, ifstat, netstat等工具的功能,支持彩色输出、CSV导出。
    • 用途: 同时监控CPU、磁盘、网络、内存、中断、上下文切换等,一目了然发现关联性(如网络流量激增时磁盘IO是否也高)。
    • 常用命令: dstat -cdngym --top-cpu --top-mem

二、CPU 性能分析

  1. mpstat

    • 功能: 报告每个CPU或所有CPU的平均使用情况,包括用户态、内核态、空闲、IO等待、软硬中断、虚拟化占用等。
    • 用途: 查看CPU使用是否均衡,是否存在单个核心过载,分析CPU时间消耗在用户态还是内核态。
    • 常用命令: mpstat -P ALL 1
  2. pidstat

    • 功能: 监控进程/线程的CPU、内存、IO等使用情况。
    • 用途: 细粒度定位具体哪个进程/线程消耗CPU高。
    • 常用命令:
      • pidstat -u 1 (查看所有进程CPU使用)
      • pidstat -t -p <PID> 1 (查看特定进程的所有线程CPU使用)
  3. perf

    • 功能: Linux内核提供的强大性能分析工具(性能计数器)。
    • 用途:
      • perf top:实时显示消耗CPU最多的函数/指令(类似top,但深入到函数级)。
      • perf record / perf report:录制性能事件(如CPU周期、缓存命中/失效、分支预测失误),生成报告进行离线分析。
      • perf stat:运行一个命令并统计其性能计数器(指令数、周期数、缓存引用/失效等)。
    • 用途: 深入分析CPU热点(哪些函数最耗时)、缓存效率、分支预测问题,定位代码级性能瓶颈。
  4. uptime

    • 功能: 显示系统运行时间、当前登录用户数和系统平均负载。
    • 用途: 快速了解系统负载趋势(1分钟、5分钟、15分钟平均值)。负载高于CPU核心数通常表示存在排队。

三、内存 性能分析

  1. free

    • 功能: 显示系统总体内存和Swap使用情况(总量、已用、空闲、缓冲、缓存)。
    • 用途: 快速了解物理内存和Swap空间的使用压力。关键看available(可用内存,包含可回收的缓存/缓冲)。
    • 常用命令: free -h (以人类可读格式显示)
  2. vmstat (见上文)

    • 用途: 关注si(每秒从Swap读入内存)、so(每秒从内存写入Swap)。si/so持续大于0是内存不足的强烈信号。
  3. pidstat (见上文)

    • 用途: pidstat -r 1 查看进程的内存使用(常驻集RSS、虚拟内存VSZ、缺页异常)。
  4. pmap

    • 功能: 报告指定进程的详细内存映射情况。
    • 用途: 分析进程内存具体用在哪些库、堆、栈上,查找内存泄漏嫌疑区域。
    • 常用命令: pmap -x <PID>
  5. slabtop

    • 功能: 实时显示内核slab缓存(内核对象缓存)的使用情况。
    • 用途: 诊断内核级内存消耗或泄漏。

四、磁盘 I/O 性能分析

  1. iostat

    • 功能: 监控系统所有磁盘设备的IO统计信息(TPS、读写速度、读写延迟、队列长度、设备利用率%util)。
    • 用途: 识别磁盘瓶颈(高%util、长await/wait表示设备饱和或慢)、对比不同磁盘性能。
    • 常用命令: iostat -dx 1 (查看设备详细统计,每秒刷新)
  2. iotop

    • 功能: 类似top,但实时显示按磁盘IO排序的进程/线程。
    • 用途: 快速定位哪个进程在进行大量磁盘读写。
    • 常用命令: iotop
  3. pidstat (见上文)

    • 用途: pidstat -d 1 查看进程的磁盘读写统计(kB_rd/s, kB_wr/s)。
  4. lsof

    • 功能: 列出被进程打开的文件。
    • 用途: 结合iostat/iotop定位到具体进程后,查看该进程正在读写哪些文件。
    • 常用命令: lsof -p <PID>
  5. blktrace / blkparse / btt

    • 功能: 强大的块设备层IO跟踪分析工具套件。
    • 用途: 深入分析IO请求在块设备层(从文件系统下发到设备驱动完成)的生命周期和延迟分布,定位IO栈中的具体瓶颈点。学习曲线较陡。

五、网络 性能分析

  1. netstat / ss

    • 功能: 显示网络连接、路由表、接口统计、伪装连接、组播成员等信息。ss (socket statistics) 是netstat的现代替代品,通常更快更高效。
    • 用途: 查看连接状态(如大量TIME_WAITCLOSE_WAIT)、监听端口、网络接口流量统计、路由信息。
    • 常用命令:
      • ss -tunap (查看所有TCP/UDP连接及对应进程)
      • netstat -s / ss -s (查看网络栈统计汇总)
      • netstat -i / ip -s link (查看网络接口统计)
  2. ip

    • 功能: 强大的网络接口、路由、邻居(ARP)、隧道等配置和管理工具(替代老旧的ifconfig, route, arp)。
    • 用途: 配置和查看网络接口、路由表、ARP缓存等。
    • 常用命令:
      • ip addr show
      • ip route show
      • ip neigh show (ARP表)
  3. ethtool

    • 功能: 查询和控制网络接口驱动参数和硬件设置。
    • 用途: 查看网卡驱动信息、速度、双工模式、统计信息(丢包、错包)、调整Ring Buffer大小等。
    • 常用命令: ethtool <interface>, ethtool -S <interface> (查看详细统计)
  4. tcpdump / wireshark

    • 功能: 强大的网络抓包和分析工具。tcpdump是命令行工具,wireshark是带图形界面的分析器。
    • 用途: 捕获和分析网络数据包,诊断网络连接问题、协议问题、性能问题(重传、乱序、窗口大小)。非常底层,需要网络协议知识。
  5. nload / iftop

    • 功能: 实时监控网络接口的流量(带宽使用)。nload显示总带宽,iftop按连接对显示带宽使用排名。
    • 用途: 快速查看哪个连接或主机占用了大量带宽。
  6. ping / traceroute / mtr

    • 功能: 测试网络连通性、路径和延迟。mtr (My Traceroute) 结合了pingtraceroute的功能。
    • 用途: 诊断网络可达性、路由路径、网络延迟和丢包发生在哪一跳。

六、系统日志分析

  1. dmesg

    • 功能: 查看内核环形缓冲区中的消息。
    • 用途: 诊断硬件问题(驱动加载失败、设备错误)、内核崩溃信息(Oops/Panic)、文件系统错误、内存不足事件等。系统启动异常或硬件故障排查必看!
    • 常用命令: dmesg -T (带时间戳), dmesg | grep -i error
  2. journalctl (Systemd系统)

http://www.lryc.cn/news/589069.html

相关文章:

  • OpenCV-Python Tutorial : A Candy from Official Main Page(三)
  • 【Linux系统】命令行参数和环境变量
  • 涨停板池,跌停板池,炸板池,次新股池,强势股池数据接口
  • SSM框架学习DI入门——day2
  • Flutter瀑布流布局深度实践:打造高性能动态图片墙
  • 基于Ruoyi和PostgreSQL的统一POI分类后台管理实战
  • IPSec和HTTPS对比(一)
  • 前端学习笔记:React.js中state和props的区别和联系
  • 数字影像新风口 入驻国际数字影像产业园解锁151项全周期服务
  • 20.如何在 Python 字典中找到最小值或最大值的键?
  • 关于list
  • 使用 PowerMockito 模拟 new A() 行为
  • 文心一言开源版部署及多维度测评实例
  • linux-线程互斥
  • 硬件设计学习DAY1——电源的分类
  • HAProxy 简介及配置文件详解
  • nlp论文:分本分类:《Bag of Tricks for Efficient Text Classification》
  • 渭河SQL题库-- 来自渭河数据分析
  • 5.数据归一化
  • Python爬虫实战:研究Mistune库相关技术
  • UE5多人MOBA+GAS 23、制作一个地面轰炸的技能
  • Typecho插件开发:实现文章字数统计与阅读时长计算功能
  • Docker镜像导入、导出操作指南
  • 大型语言模型(LLM)的技术面试题
  • 如何通过 WebSocket 接口订阅实时外汇行情数据(PHP 示例)
  • 深入探讨Hadoop YARN Federation:架构设计与实践应用
  • CentOS 8-BClinux8.2更换为阿里云镜像源:保姆级教程
  • Linux、Ubuntu和CentOS的关系与区别
  • RNN、GRU 与 LSTM 计算成本深入对比
  • 贪心贪心的反悔