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系统)

相关推荐
chlk12321 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑21 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件1 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
深紫色的三北六号1 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash1 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI2 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端