性能优化命令

性能优化常用命令

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 压力,即不停地执行 syncpidstatiowait升高
stress -c 8 --timeout 600 模拟大量进程,pidstat%wait升高

平均负载 uptime 是指单位时间内,系统处于可运行状态不可中断状态的平均进程数,也就是平均活跃进程数。通过 ps 命令可以看到进程的状态。

uptimeCPU 率高低 的关系:

  • 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 包含 mpstatpidstat
mpstat 常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标
pidstat 常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标
vmstat 常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数
sysbench 多线程基准测试工具
ab
execsnoop 一个专为短时进程设计的工具
dstat 同时查看 CPU 和 I/O 这两种资源的使用情况