常见指标分类(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 性能优化实战
性能之巅