性能优化常用命令
CPU 负载
命令 |
解释 |
uptime |
0.63, 0.83, 0.88 |
grep 'model name' /proc/cpuinfo \| wc -l |
查看有几个CPU,以便对比uptime 是否超过负载 |
mpstat -P ALL 5 |
监控所有CPU,后面数字5表示间隔5秒后输出一组数据 |
pidstat -u 5 1 |
间隔5秒后输出一组数据 |
stress --cpu 1 --timeout 600 |
模拟 CPU 密集型进程,pidstat 的%usr 升高 |
stress -i 1 --timeout 600 |
模拟 I/O 压力,即不停地执行 sync ,pidstat 的iowait 升高 |
stress -c 8 --timeout 600 |
模拟大量进程,pidstat 的%wait 升高 |
平均负载 uptime
是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数。通过 ps
命令可以看到进程的状态。
uptime
和 CPU 率高低
的关系:
- CPU 密集型进程,两个值都高
- I/O 密集型进程,CPU 使用率不一定会高,但是
uptime
会高
- 大量等待 CPU 的进程调度,两个值也会都高
命令 |
解释 |
vmstat 5 |
每隔5秒输出1组数据,cs 每秒上下文切换次数,in 每秒中断次数 |
pidstat -w 5 |
查看每个进程上下文切换的情况,cswch 每秒自愿上下文切换,nvcswch 每秒非自愿上下文切换 |
pidstat -w -u 1 |
-w 参数表示输出进程切换指标,而-u 参数则表示输出CPU使用指标 |
pidstat -wt 1 |
-wt 参数表示输出线程的上下文切换指标 |
sysbench --threads=10 --max-time=300 threads run |
以10个线程运行5分钟的基准测试,模拟多线程切换的问题 |
watch -d cat /proc/interrupts |
查看系统中断的类型,-d 参数表示高亮显示变化的区域 |
所谓自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。而非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换。
命令 |
解释 |
cat /proc/stat |
CPU总使用率 |
/proc/[pid]/stat |
各个进程的CPU使用率,使用man proc 查看帮助文档 |
top |
按下1 显示每个CPU的使用率 |
perf top -g -p <pid> |
实时显示占用 CPU 时钟最多的函数或者指令,因此可以用来查找热点函数 |
perf record -g |
保存数据 |
perf report |
使用这个命令解析record 保存的数据 |
ab -c 10 -n 100 http://192.168.0.10:10000/ |
并发10个请求测试Nginx性能,总共测试100个请求 |
pstree \| grep stress |
查看stress 进程的父进程 |
命令 |
解释 |
dstat 1 10 |
间隔1秒输出10组数据 |
pidstat -d -p 4344 1 3 |
-d 展示 I/O 统计数据,-p 指定进程号,间隔 1 秒输出 3 组数据 |
软中断,实际遇到的大多是网络收发的软中断性能瓶颈:
命令 |
解释 |
watch -d cat /proc/softirqs |
各种软中断类型的次数 |
网络
命令 |
解释 |
sar -n DEV 1 |
-n DEV 表示显示网络收发的报告,间隔1秒输出一组数据 |
tcpdump -i eth0 -n tcp port 80 |
-i eth0 只抓取eth0网卡,-n 不解析协议名和主机名,tcp port 80 表示只抓取tcp协议并且端口号为80的网络帧 |
工具包
命令 |
解释 |
stress |
Linux 系统压力测试工具 |
sysstat |
包含 mpstat 和 pidstat |
mpstat |
常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标 |
pidstat |
常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标 |
vmstat |
常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数 |
sysbench |
多线程基准测试工具 |
ab |
|
execsnoop |
一个专为短时进程设计的工具 |
dstat |
同时查看 CPU 和 I/O 这两种资源的使用情况 |