常见指标分类(USE法)
资源 |
类型 |
性能指标 |
CPU |
使用率 |
CPU使用率 |
CPU |
饱和度 |
运行队列长度或平均负载 |
CPU |
错误数 |
硬件cpu错误数 |
内存 |
使用率 |
已用内存百分比或SWAP用量百分比 |
内存 |
饱和度 |
内存换页量 |
内存 |
错误数 |
内存分配失败或OOM |
存储设备I/O |
使用率 |
设备I/O事件百分比 |
存储设备I/O |
饱和度 |
等待队列产犊或延迟 |
存储设备I/O |
错误数 |
I/O错误数 |
文件系统 |
使用率 |
已用容量百分比 |
文件系统 |
饱和度 |
已用容量百分比 |
文件系统 |
错误数 |
文件读写错误数 |
网络 |
使用率 |
带宽使用率 |
网络 |
饱和度 |
重传报文数 |
网络 |
错误数 |
网卡收发错误数、丢包数 |
文件描述符 |
使用率 |
已用文件描述符数百分比 |
连接跟踪 |
使用率 |
已用连接跟踪数百分比 |
连接数 |
饱和度 |
TIMEWAIT状态连接数 |
常见性能工具
CPU性能工具
性能指标 |
性能工具 |
说明 |
平均负载 |
uptime、top、/proc/loadavg |
uptime最简单;top提供更全的指标;/proc/loadavg常用于监控系统 |
系统CPU使用率 |
vmstat , mpstat , top , sar , /proc/stat
|
top、vmstat、mpstat只可以动态查看,而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数 |
lscpu , /proc/cpuinfo
|
lscpu更直观 |
事件剖析 |
perf , 火焰图, execsnoop
|
perf和火焰图用来分析热点函数以及调用栈,execsnoop用来监测短时进程 |
动态追踪 |
ftrace , bcc , systemtap
|
ftrace用于跟踪内核函数调用栈,而bcc和systemtap则用于跟踪内核或应用程序的执行过程(注意bcc要求内核>=4.1) |
内存性能工具
性能指标 |
性能工具 |
说明 |
系统已用、可用、剩余内存 |
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,valgrind还可以在旧版本(3.x)内核中使用 |
指定文件的缓存大小 |
pcstat |
需要从源码下载安装 |
文件系统和磁盘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
|
注意使用pidstat -d选项 |
块设备I/O事件跟踪 |
blktrace |
需要跟blkparse配合使用,比如blktrace -d /dev/sda -o- | blkparse -|- |
进程I/O系统调用跟踪 |
strace , perf trace
|
strace只可以跟踪单个进程,而perf trace还可以跟踪所用进程的系统调用 |
进程块设备I/O大小跟踪 |
biosnoop , biotop
|
需要安装bcc |
动态追踪 |
ftrace , bcc , systemtap
|
ftrace用于跟踪内核函数调用栈,而bcc和systemtap则用于跟踪内核或应用程序的执行过程(注意bcc要求内核版本>= 4.1) |
网络性能工具
性能指标 |
性能工具 |
说明 |
吞吐量(BPS) |
sar , nethogs , iftop , /proc/net/dev
|
分别可以查看网络接口、进程以及IP地址的网络吞吐量;/proc/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 , /proc/sys/net/netfilter/nf_conntrack_count , /proc/sys/net/netfilter/nf_conntrack_mac
|
conntrack可用来查看所用连接跟踪的相关信息,nf_conntrack_count只是连接跟踪的数量,而nf_conntrack_mac则限制了总的连接跟踪数量 |
路由 |
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) |
根据指标找工具
CPU性能
性能指标 |
性能工具 |
说明 |
平均负载 |
uptime、top |
uptime最简单、top提供了更全的指标 |
系统整体CPU使用率 |
vmstat、mpstat、top、sar、/proc/stat |
top、vmstat、mpstat只可以动态查看,而sar还可以记录历史数据;/proc/stat是其他性能工具的数据来源,也常用于监控 |
进程CPU使用率 |
top、pidstat、ps、htop、atop |
top和ps可以按CPU使用率给进程排序,而pidstat只显示实际用了CPU的进程;htop和atop以不同颜色显示更直观 |
系统上下文切换 |
vmstat |
除了上下文切换次数,还提供运行状态和不可中断状态的进程数 |
进程上下文切换 |
pidstat |
注意加上-w参数 |
软中断 |
top、/proc/softirq、mpstat |
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个数 |
/proc/cpuinfo、lscpu |
lscpu更直观 |
事件剖析 |
perf、execsnoop |
per可以用来分析CPU的换粗以及内核调用栈,execsnoop用来监测短时进程 |
内存性能
性能指标 |
性能工具 |
系统已用、可用、剩余内存 |
free、vmstat、sar、/proc/meminfo |
进程虚拟内存、常驻内存、共享内存 |
ps、top |
进程内存分布 |
pmap |
进程Swap换出内存 |
top、/proc/pid/status |
进程缺页异常 |
ps、top |
系统换页情况 |
sar |
缓存/缓冲区用量 |
free、vmstat、sar、cachestat |
缓存/缓冲区命中率 |
cachetop |
SWAP已用空间和剩余空间 |
free、sar |
Swap换入换出 |
vmstat |
内存泄漏检测 |
memleak、valgrind |
指定文件的缓存大小 |
pcstat |
文件系统和磁盘I/O
性能指标 |
性能工具 |
说明 |
文件系统空间容量、使用量以及剩余空间 |
df |
详细文档见info coreutils ‘df invocation’ |
索引节点容量、使用量以及剩余量 |
df |
使用-i选项 |
页缓存和可回收slab缓存 |
/proc/meminfo、sar、vmstat |
使用sar -r选项 |
缓冲区 |
/proc/meminfo、sar、vmstat |
使用sar -r选项 |
目录项、索引节点以及文件系统的缓存 |
/proc/slabinfo、slabtop |
slabtop更直观 |
磁盘I/O使用率、IOPS、吞吐量、响应时间、I/O平均大小以及等待队列长度 |
iostat、sar、dstat |
使用iostat -d -x或sar -d选项 |
进程I/O大小以及I/O延迟 |
pidstat、iotop |
使用pidstat -d选项 |
块设备I/O系统调用跟踪 |
blktrace |
blktrace -d /dev/sda -o-|blkparse -i- |
进程I/O系统调用跟踪 |
strace |
通过系统调用跟踪进程I/O |
进程块设备I/O大小跟踪 |
biosnoop、biotop |
需要安装bcc软件包 |
网络性能
性能指标 |
性能工具 |
说明 |
吞吐量(BPS) |
sar、nethogs、iftop |
分别可以查看网络接口、进程以及IP地址的网络吞吐量 |
PPS |
sar、/proc/net/dev |
查看网络接口的PPS |
连接数 |
netstat、ss |
查看网络连接数 |
延迟 |
ping、hping3 |
通过ICMP、TCP等测试网络延迟 |
连接跟踪数 |
conntrack |
查看和管理连接跟踪情况 |
路由 |
mtr、route、traceroute |
查看路由并测试链路信息 |
DNS |
dig、nslookup |
排查DNS解析问题 |
防火墙和NAT |
iptables |
配置和管理防火墙及NAT规则 |
网卡功能 |
ethtool |
查看和配置网络接口的功能 |
抓包 |
tcpdump、wireshark |
抓包分析网络流量 |
内核协议栈跟踪 |
bcc、systemtap |
动态跟踪内核协议栈的行为 |
根据工具找指标
CPU性能
性能工具 |
CPU性能指标 |
uptime |
平均负载 |
top |
平均负载、运行队列、整体的CPU使用率以及每个进程的状态和CPU使用率 |
htop |
top增强版,以不同颜色区分不同类型的进程 |
atop |
CPU、内存、磁盘和网络等各种资源的全面监控 |
vmstat |
系统整体的CPU使用率、上下文切换次数、中断次数,还包括处于运行和不可中断状态的进程数量 |
mpstat |
每个CPU的使用率和软中断次数 |
pidstat |
进程和线程的CPU使用率、中断上下文切换次数 |
/proc/softirq |
软中断类型和在每个CPU上的累积中断次数 |
/proc/interrupts |
软中断类型和在每个CPU上的累积中断次数 |
ps |
每个进程的状态和CPU使用率 |
pstree |
进程的父子关系 |
dstat |
系统整体的CPU使用率 |
sar |
系统整体的CPU使用率,包括可配置的历史数据 |
strace |
进程的系统调用 |
perf |
CPU性能事件剖析,如调用链分析、CPU缓存、CPU调度等 |
execsnoop |
监控短时进程 |
内存性能
性能工具 |
内存指标 |
|
free、/proc/meminfo |
系统已用、可用、剩余内存以及缓存和缓冲区的使用量 |
|
top、ps |
进程虚拟、常驻、共享内存以及缺页异常 |
|
vmstat |
系统剩余内存、缓存、缓冲区、换入、换出 |
|
sar |
系统内存换页情况、内存使用率、缓存和缓冲区用量以及Swap使用情况 |
|
cachestat |
系统缓存和缓冲区的命中率 |
|
cachetop |
进程缓存和缓冲区的命中率 |
|
slabtop |
系统slab缓存使用情况 |
|
/proc/pid/status |
进程swap内存等 |
|
/proc/pid/smaps、pmap |
进程地址空间和内存状态 |
|
valgrind |
进程内存错误检查器,用来检测内存初始化、泄漏、越界访问等各种内存错误 |
|
memleak |
内存泄漏检测 |
|
pcstat |
查看指定文件的缓存情况 |
|
文件系统和磁盘I/O
性能工具 |
性能指标 |
性能工具 |
性能指标 |
iostat |
磁盘I/O使用率、IOPS、吞吐量、响应时间、I/O平均大小以及等待队列长度 |
blktrace |
跟踪块设备I/O事件 |
pidstat |
进程I/O大小以及I/O延迟 |
biosnoop |
跟踪进程的块设备I/O大小 |
sar |
磁盘I/O使用率、IOPS、吞吐量以及响应时间 |
biotop |
跟踪进程块I/O并按照I/O大小排序 |
dstat |
磁盘I/O使用率、IOPS以及吞吐量 |
strace |
跟踪进程的I/O系统调用 |
iotop |
按I/O大小对进程排序 |
perf |
跟踪内核中的I/O事件 |
slabtop |
目录项、索引节点以及文件系统的缓存 |
df |
磁盘空间和索引节点使用量和剩余量 |
/proc/slabinfo |
目录项、索引节点以及文件系统的缓存 |
mount |
文件系统的挂在路径以及挂载参数 |
/proc/meminfo |
页缓存和可回收的slab缓存 |
du |
目录占用的磁盘空间大小 |
/proc/diskstats |
磁盘的IOPS、吞吐量以及延迟 |
tune2fs |
显示和设置文件系统参数 |
/proc/pid/io |
进程IOPS、I/O大小以及I/O延迟 |
hdparam |
显示和设置磁盘参数 |
vmstat |
缓存和缓冲区用量汇总 |
|
|
网络性能
性能工具 |
主要功能 |
ifconfig、ip |
配置和查看网络接口 |
ss |
查看网络连接数 |
sar、/proc/net/dev/sys/class/net/eth0/statistics/ |
查看网络接口的网络收发情况 |
nethogs |
查看进程的网络收发情况 |
iftop |
查看IP的网络收发情况 |
ethtool |
查看和配置网络接口 |
conntrack |
查看和管理连接跟踪情况 |
nslookup、dig |
排查DNS解析问题 |
mtr、route、traceroute |
查看路由并测试链路信息 |
ping、hping3 |
测试网络延迟 |
tcpdump |
网络抓包工具 |
wireshark |
网络抓包和图形界面分析工具 |
iptables |
配置和管理防火墙及NAT规则 |
perf |
剖析内核协议栈的性能 |
systemtap、bcc |
动态追踪内核协议栈的行为 |
CPU性能分析一般步骤
内存性能分析一般步骤
I/O性能分析一般步骤
网络性能分析一般步骤
参考
Phoronix Test Suite
OpenBenchmarking.org
Linux 性能优化实战
性能之巅