你掌握的Linux性能工具

前言

介绍一些常用的Linux性能工具,这些工具可以帮助系统管理员和开发人员监控、分析和优化系统性能。

文中梳理常见的性能工具,从 CPU、内存、文件系统和磁盘 I/O、网络以及基准测试等不同的角度,汇总了各类性能指标所对应的性能工具速查表。

Brendan Gregg 性能工具谱图

Brendan Gregg 性能工具谱图

CPU 性能工具

CPU性能指标

  1. CPU使用率
  • 用户空间 (user space) 的CPU使用率
  • 系统空间 (system space) 的CPU使用率
  • 空闲时间 (idle time)
  • 等待I/O的时间 (iowait)
  • 中断处理时间 (irqsoftirq)
  1. 上下文切换
  • 每秒上下文切换次数 (voluntaryinvoluntary)
  1. 负载平均值
  • 1分钟、5分钟和15分钟的系统负载平均值
  1. CPU性能指标监控工具
  • top: 实时显示CPU使用率、内存使用情况和进程信息。
  • htop: 类似于top,但提供更交互性和用户友好的界面。
  • mpstat: 显示每个CPU的使用情况;使用 mpstat -P ALL 显示所有CPU的使用情况。
  • vmstat: 显示系统的整体性能,包括CPU、内存、I/O等;使用 vmstat 1 每秒刷新一次。
mindmap
  root((cpu性能指标))
    CPU使用率
      用户CPU
      系统CPU
      IOWAIT
      软中断
      硬中断
      窃取CPU
      客户CPU
    上下文切换
      自愿上下文切换
      非自愿上下文切换
    平均负载
    CPU缓存命中率

CPU性能工具

性能指标性能工具说明
平均负载uptime, top, /proc/loadavguptime最简单;top提供了更全面指标;/proc/loadavg 常用于监控系统
系统CPU使用率vmstat, mpstat, top, sar, /proc/stat/top,vmstat,top 只可以动态查看,而sar还可以记录历史数据;/proc/stat是其他性能工具的数据来源,也常用于监控。
进程CPU使用率top, ps, pidstat, htop, atoptopps可以按CPU使用率给进程排序,而 pidstat只显示实际用了CPU的进程;htopatop以不同颜色显示更直观
系统上下文切换vmstat除了上下文切换次数,还提供运行状态和 不可中断状态进程的数量
进程上下文切换pidstat注意加上-w 选项
软中断top,mpstat,/proc/softirqstop提供软中断CPU使用率, 而/proc/softirqsmpstat提供了各种软 中断在每个CPU上的运行次数
硬中断vmstat, /proc/interruptsvmstat提供总的中断次数, 而/proc/interrupts提供各种中断在每个 CPU上运行的累积次数
网络dstat, sar, tcpdumpdstatsar提供总的网络接收和发送情况,而tcpdump则是动态抓取正在进行的网络通讯
I/Odstat,sardstatsar都提供了I/O的整体情况
CPU缓存perf使用 perf stat 子命令
CPU数Iscpu,/proc/cpuinfoIscpu更直观
事件剖析perf、火焰图、execsnoopperf和火焰图用来分析热点函数以及调用栈,execsnoop用来检测短时进程
动态追踪ftrace bcc、systemtapfrace用于跟踪内核函数调用栈,而bcc和systemtap则用于跟踪讷河或应用程序的执行过程

内存性能工具

内存性能指标

  1. 总内存和可用内存
  • 物理内存总量
  • 可用内存量
  1. 缓存和缓冲区
  • 缓存的内存量
  • 缓冲区的内存量
  1. 交换使用情况
  • 已使用的交换空间
  • 可用的交换空间
  • 交换进/出次数
  1. 页面故障
  • 每秒页面故障数 (major 和 minor)

内存性能指标监控工具

  • free: 使用 free -h 显示内存的总量、已用、可用、缓存和交换空间。
  • vmstat: 同样适用于内存监控;使用 vmstat 1 每秒刷新一次。
  • /proc/meminfo: 使用 cat /proc/meminfo 显示详细的内存使用信息。
mindmap
  root((内存性能指标))
    系统内存指标
      已用内存
      剩余内存
      可用内存
      缺页异常
        主缺页异常
        次缺页异常
      缓存/缓冲区
        使用量
        命中量
      Slabs
    进程内存指标
      虚拟内存(VSS)
      常驻内存(RSS)
      按比例分配共享内存后的物理内存(PSS)
      独占内存(USS)
      共享内存
      SWAP内存
      缺页异常
         主缺页异常
         次缺页异常
    SWAP
      可用空间
      剩余空间
      换入速度
      换出速度

内存性能工具

性能指标性能工具说明
系统已用、可用、剩余内存freevmstatsar /proc/meminfofree最为简单,而vmstatsar更为全面; /proc/meminfo是其他工具的数据来源,也常用于监控系统中|
进程虚拟内存、常驻内存、共享内存pstoppidstat/proc/pid/stat /proc/pid/statuspstop最简单,而pidstat则需要 加上-r选项;/proc/pid/stat/proc/pid/status是其他工具的 数据来源,也常用于监控系统中
进程内存分布pmap /proc/pid/maps/proc/pid/mapspmap的数据来源
进程Swap换出内存top/proc/pid/status/proc/pid/statustop的数据来源
进程缺页异常pstoppidstat注意给pidstat加上-r选项
系统换页情况sar注意加上-B选项
缓存/缓冲区用量freevmstat sar cachestatvmstat最常用,而cachestat需要安装bcc
缓存/缓冲区命中率cachetop需要安装bcc
SWAP已用空间和剩余空间freesarfree最为简单,而sar还可以记录历史
Swap换入换出vmstatsarvmstat最为简单,而sar还可以记录历史
内存泄漏检测memleakvalgrind|memleak需要安装bcc
制定文件的缓存大小pcstat需要从源码下载安装

磁盘 I/O 性能工具

文件系统和磁盘I/O性能指标

  1. 磁盘使用率
  • 每个文件系统的已用空间和可用空间
  1. I/O操作
  • 每秒读/写操作次数 (IOPS)
  • 每秒读/写的字节数 (吞吐量)
  1. I/O等待时间
  • 请求服务时间
  • 队列等待时间
  1. 平均队列长度
  • 设备的请求队列长度

文件系统和磁盘I/O性能指标监控工具

  • df: 使用 df -h 显示文件系统的磁盘使用情况。
  • du: 使用 du -sh /path/to/directory 显示指定目录的磁盘使用情况。
  • iostat: 显示CPU和I/O设备的使用情况;使用 iostat -d 1 每秒显示一次磁盘I/O情况。
  • iotop: 交互式显示实时的磁盘I/O。
  • dstat: 综合显示CPU、内存、磁盘、网络等多个指标。
mindmap
  root((I/O性能指标))
    磁盘
      使用率
      IOPS
      吞吐量(B/s)
      响应时间(延迟)
      缓冲区
      相关因素
        读写类型(如顺序还是随机)
        读写比例
        读写大小
        存储类型(如RAID级别,本地还是网络)
      
    文件系统
      存储空间容量、使用量以及剩余空间
      索引点容量,使用量以及剩余量
      缓存
        页缓存
        目录项缓存
        索引节点缓存
        具体文件系统缓存(如ext4的缓存)
      IOPS(文件I/O)
      响应时间(延迟)
      吞吐量(B/s)

文件系统和磁盘I/O性能工具

性能指标性能工具说明
文件系统空间容量、使用量以及剩余空间df详细文档可以执行 info coreutils 'df invocation'命令查询
索引节点容量、使用量以及 剩余量df注意加上-i选项
页缓存和可回收Slab缓存/proc/meminfosarvmstat注意sar需要加上-r选项, 而/proc/meminfo是其他工具的数据来源,也常用于监控
缓冲区/proc/meminfosarvmstat注意sar需要加上-r选项, 而/proc/meminfo是其他工具的数据来源,也常用于监控
目录项、索引节点以及文件 系统的缓存/proc/slabinfo, slabtopslabtop更直观,而/proc/slabinfo常用于监控
磁盘I/O使用率、IOPS、吞吐量、响应时间、I/O平均大 小以及等待队列长度iostatsardstat /proc/diskstatsiostat最为常用,注意使用iostat -d -xsar -d选项;/proc/diskstats则是其他工具数据来源,也常用于监控
进程I/O大小以及I/O延迟pidstat,iotop注意使用pidstart -d选项
块设备I/O事件跟踪blktrace需要跟blkparse配合使用,比如 `blktrace -d /dev/sda -o-
进程 I/O 系统调用跟踪straceperf tracestrace只可以跟踪单个进程,而perf trace还可以跟踪所有进程的系统调用
进程块设备I/O大小跟踪biosnoop,biotop需要安装bcc
动态追踪ftrace bccsystemtapftrace用于跟踪内核函数调用栈,而bcc和systemtap则用于跟踪内核或应用程序的执行过程(注意bcc要求内核版本>4.1)

网络性能工具

网络性能指标

  1. 带宽使用率
  • 每秒发送和接收的字节数
  • 每秒发送和接收的数据包数
  1. 网络延迟
  • 请求到响应的时间
  1. 错误和丢包率
  • 接收和发送的错误数
  • 丢包率
  1. 连接数:
  • 活动连接数
  • 新建连接数

网络性能指标监控工具

  • ifconfigip: ifconfig 显示网络接口的配置和状态;ip -a 显示所有网络接口的详细信息。
  • netstat: 使用 netstat -i 显示网络接口的统计信息;使用 netstat -s 显示详细的网络统计信息。
  • ss: 使用 ss -tuln 显示监听的TCP和UDP端口;使用 ss -s 显示网络连接的总结信息。
  • ping: 使用 ping <host> 测试到目标主机的网络延迟。
  • traceroute: 使用 traceroute <host> 显示到目标主机的路由路径。
  • iftop: 实时显示网络带宽的使用情况。
mindmap
  root((网络性能指标))
    应用层
      QPS
      套接字缓冲区大小
      DNS解析延迟
      响应时间
      错误数
    传输层
      TCP连接数
        全连接
        半连接
        TIMEWAIT
      连接跟踪数
      重传数
      丢包数
      延迟
    链路层
      PPS(每秒网络帧数)
      BPS(每秒字节数)
      丢包数
      错误数
    网络层
       丢包数
       TTL
       拆包

网络性能工具

性能指标性能工具说明
吞吐量(BPS)sarnethogsiftop/pro/net/dev分别可以查看网络端口、进程以及IP地址的网络吞吐量;/pro/net/dev常用于监控
吞吐量(PPS)sar/proc/net/dev注意使用 sar -n DEV 选项
网络连接数netstatssss速度更快
网络错错误数子netstatsar注意使用netstat -s 或者 sar -n EDEV/EIP选项
网络延迟pinghping3ping基于ICMP,而hping3则基于TCP协议
连接跟踪数conntrackconntrack可用来查看所有连接跟踪的相关信息,nf_conntrack_count只是连接跟踪的数量,而nf_conntrack_max则限制了总的连接跟踪数量
路由mtrtracerouterouteroute用于查询路由表,而mtrtraceroute则用来排查和定位网络链路中的路由问题
DNSdig,nslookup用于排查DNS解析的问题
防火墙和NAT|iptables用于排查防火墙及NAT的问题
网卡选项ethtool用于查看和配置网络接口的功能选项
网络抓包tcpdumpWireshark|通常在服务中使用tcpdump抓包后在复制出来用Wireshark的图形界面分析
动态追踪ftracebccsystemtapftrace用于跟踪内核函数调用堆栈,而bccsystemtap则用于跟踪内核或应用程序的执行过程(注意bcc要求内核版本>=4.1)

监控和分析这些性能指标,可以全面了解系统的运行状况,识别潜在的瓶颈和问题。它们在日常运维、性能调优、容量规划和故障排查中发挥着至关重要的作用。

通过合理设置监控工具和报警策略(如Nagios、Zabbix、Prometheus等),确保系统以高效、稳定的状态运行。

LInux性能测试工具

LInux性能测试工具

关于我
loading