你掌握的Linux性能工具
大熊•
前言
介绍一些常用的Linux性能工具,这些工具可以帮助系统管理员和开发人员监控、分析和优化系统性能。
文中梳理常见的性能工具,从 CPU、内存、文件系统和磁盘 I/O、网络以及基准测试等不同的角度,汇总了各类性能指标所对应的性能工具速查表。
Brendan Gregg 性能工具谱图
CPU 性能工具
CPU性能指标
- CPU使用率
- 用户空间 (
user space
) 的CPU使用率 - 系统空间 (
system space
) 的CPU使用率 - 空闲时间 (
idle time
) - 等待I/O的时间 (
iowait
) - 中断处理时间 (
irq
和softirq
)
- 上下文切换
- 每秒上下文切换次数 (
voluntary
和involuntary
)
- 负载平均值
- 1分钟、5分钟和15分钟的系统负载平均值
- 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/loadavg | uptime 最简单;top 提供了更全面指标;/proc/loadavg 常用于监控系统 |
系统CPU使用率 | vmstat , mpstat , top , sar , /proc/stat/ | top ,vmstat ,top 只可以动态查看,而sar 还可以记录历史数据;/proc/stat 是其他性能工具的数据来源,也常用于监控。 |
进程CPU使用率 | top , ps , pidstat , htop , atop | top 和ps 可以按CPU使用率给进程排序,而 pidstat 只显示实际用了CPU的进程;htop 和atop 以不同颜色显示更直观 |
系统上下文切换 | vmstat | 除了上下文切换次数,还提供运行状态和 不可中断状态进程的数量 |
进程上下文切换 | pidstat | 注意加上-w 选项 |
软中断 | top ,mpstat ,/proc/softirqs | top 提供软中断CPU使用率, 而/proc/softirqs 和mpstat 提供了各种软 中断在每个CPU上的运行次数 |
硬中断 | vmstat , /proc/interrupts | vmstat 提供总的中断次数, 而/proc/interrupts 提供各种中断在每个 CPU上运行的累积次数 |
网络 | dstat , sar , tcpdump | dstat 和sar 提供总的网络接收和发送情况,而tcpdump 则是动态抓取正在进行的网络通讯 |
I/O | dstat ,sar | dstat 和sar 都提供了I/O的整体情况 |
CPU缓存 | perf | 使用 perf stat 子命令 |
CPU数 | Iscpu ,/proc/cpuinfo | Iscpu 更直观 |
事件剖析 | perf、火焰图、execsnoop | perf和火焰图用来分析热点函数以及调用栈,execsnoop用来检测短时进程 |
动态追踪 | ftrace bcc、systemtap | frace用于跟踪内核函数调用栈,而bcc和systemtap则用于跟踪讷河或应用程序的执行过程 |
内存性能工具
内存性能指标
- 总内存和可用内存
- 物理内存总量
- 可用内存量
- 缓存和缓冲区
- 缓存的内存量
- 缓冲区的内存量
- 交换使用情况
- 已使用的交换空间
- 可用的交换空间
- 交换进/出次数
- 页面故障
- 每秒页面故障数 (major 和 minor)
内存性能指标监控工具
free
: 使用free -h
显示内存的总量、已用、可用、缓存和交换空间。vmstat
: 同样适用于内存监控;使用vmstat 1
每秒刷新一次。/proc/meminfo
: 使用cat /proc/meminfo
显示详细的内存使用信息。
mindmap
root((内存性能指标))
系统内存指标
已用内存
剩余内存
可用内存
缺页异常
主缺页异常
次缺页异常
缓存/缓冲区
使用量
命中量
Slabs
进程内存指标
虚拟内存(VSS)
常驻内存(RSS)
按比例分配共享内存后的物理内存(PSS)
独占内存(USS)
共享内存
SWAP内存
缺页异常
主缺页异常
次缺页异常
SWAP
可用空间
剩余空间
换入速度
换出速度
内存性能工具
性能指标 | 性能工具 | 说明 |
---|---|---|
系统已用、可用、剩余内存 | free 、vmstat 、sar /proc/meminfo | free 最为简单,而vmstat 、sar 更为全面; /proc/meminfo 是其他工具的数据来源,也常用于监控系统中| |
进程虚拟内存、常驻内存、共享内存 | ps 、top 、pidstat 、 /proc/pid/stat /proc/pid/status | ps 和top 最简单,而pidstat 则需要 加上-r 选项;/proc/pid/stat 和/proc/pid/status 是其他工具的 数据来源,也常用于监控系统中 |
进程内存分布 | pmap /proc/pid/maps | /proc/pid/maps 是pmap 的数据来源 |
进程Swap换出内存 | top 、/proc/pid/status | /proc/pid/status 是top 的数据来源 |
进程缺页异常 | ps 、top 、pidstat | 注意给pidstat 加上-r 选项 |
系统换页情况 | sar | 注意加上-B 选项 |
缓存/缓冲区用量 | free 、vmstat sar cachestat | vmstat 最常用,而cachestat 需要安装bcc |
缓存/缓冲区命中率 | cachetop | 需要安装bcc |
SWAP 已用空间和剩余空间 | free 、sar | free 最为简单,而sar还可以记录历史 |
Swap换入换出 | vmstat 、sar | vmstat 最为简单,而sar还可以记录历史 |
内存泄漏检测 | memleak 、valgrind |memleak需要安装bcc | |
制定文件的缓存大小 | pcstat | 需要从源码下载安装 |
磁盘 I/O 性能工具
文件系统和磁盘I/O性能指标
- 磁盘使用率
- 每个文件系统的已用空间和可用空间
- I/O操作
- 每秒读/写操作次数 (IOPS)
- 每秒读/写的字节数 (吞吐量)
- I/O等待时间
- 请求服务时间
- 队列等待时间
- 平均队列长度
- 设备的请求队列长度
文件系统和磁盘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/meminfo 、 sar 、vmstat | 注意sar 需要加上-r 选项, 而/proc/meminfo 是其他工具的数据来源,也常用于监控 |
缓冲区 | /proc/meminfo 、 sar 、vmstat | 注意sar 需要加上-r 选项, 而/proc/meminfo 是其他工具的数据来源,也常用于监控 |
目录项、索引节点以及文件 系统的缓存 | /proc/slabinfo , slabtop | slabtop 更直观,而/proc/slabinfo 常用于监控 |
磁盘I/O使用率、IOPS、吞吐量、响应时间、I/O平均大 小以及等待队列长度 | iostat 、sar 、dstat /proc/diskstats | iostat 最为常用,注意使用iostat -d -x 或sar -d 选项;/proc/diskstats 则是其他工具数据来源,也常用于监控 |
进程I/O大小以及I/O延迟 | pidstat ,iotop | 注意使用pidstart -d 选项 |
块设备I/O事件跟踪 | blktrace | 需要跟blkparse 配合使用,比如 `blktrace -d /dev/sda -o- |
进程 I/O 系统调用跟踪 | strace 、perf trace | strace只可以跟踪单个进程,而perf trace还可以跟踪所有进程的系统调用 |
进程块设备I/O大小跟踪 | biosnoop ,biotop | 需要安装bcc |
动态追踪 | ftrace bcc 、systemtap | ftrace 用于跟踪内核函数调用栈,而bcc和systemtap则用于跟踪内核或应用程序的执行过程(注意bcc要求内核版本>4.1) |
网络性能工具
网络性能指标
- 带宽使用率
- 每秒发送和接收的字节数
- 每秒发送和接收的数据包数
- 网络延迟
- 请求到响应的时间
- 错误和丢包率
- 接收和发送的错误数
- 丢包率
- 连接数:
- 活动连接数
- 新建连接数
网络性能指标监控工具
ifconfig
或ip: 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) | sar 、nethogs 、iftop 、/pro/net/dev | 分别可以查看网络端口、进程以及IP地址的网络吞吐量;/pro/net/dev 常用于监控 |
吞吐量(PPS) | sar 、/proc/net/dev | 注意使用 sar -n DEV 选项 |
网络连接数 | netstat 、ss | ss 速度更快 |
网络错错误数子 | netstat 、sar | 注意使用netstat -s 或者 sar -n EDEV/EIP 选项 |
网络延迟 | ping 、hping3 | ping 基于ICMP ,而hping3 则基于TCP 协议 |
连接跟踪数 | conntrack | conntrack 可用来查看所有连接跟踪的相关信息,nf_conntrack_count 只是连接跟踪的数量,而nf_conntrack_max 则限制了总的连接跟踪数量 |
路由 | mtr 、traceroute 、route | route 用于查询路由表,而mtr 和traceroute 则用来排查和定位网络链路中的路由问题 |
DNS | dig ,nslookup | 用于排查DNS解析的问题 |
防火墙和NAT|iptables | 用于排查防火墙及NAT的问题 | |
网卡选项 | ethtool | 用于查看和配置网络接口的功能选项 |
网络抓包 | tcpdump 、Wireshark |通常在服务中使用tcpdump抓包后在复制出来用Wireshark的图形界面分析 | |
动态追踪 | ftrace 、bcc 、systemtap | ftrace 用于跟踪内核函数调用堆栈,而bcc 和systemtap 则用于跟踪内核或应用程序的执行过程(注意bcc要求内核版本>=4.1) |
监控和分析这些性能指标,可以全面了解系统的运行状况,识别潜在的瓶颈和问题。它们在日常运维、性能调优、容量规划和故障排查中发挥着至关重要的作用。
通过合理设置监控工具和报警策略(如Nagios、Zabbix、Prometheus等),确保系统以高效、稳定的状态运行。
LInux性能测试工具