Linux性能
CPU
平均负载
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均活跃进程数
可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。
不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。
当平均负载比 CPU 个数还大的时候,系统已经出现了过载。
uptime
上下文切换
如果系统的上下文切换次数比较稳定,那么从数百到一万以内,都应该算是正常的。但当上下文切换次数超过一万次,或者切换次数出现数量级的增长时,就很可能已经出现了性能问题。
CPU使用率
内存
工具
stress
stress 是一个 Linux 系统压力测试工具
参数解释
-? 显示帮助信息
-v 显示版本号
-q 不显示运行信息
-n 显示已完成的指令情况
-t --timeout N 指定运行N秒后停止
--backoff N 等待N微妙后开始运行
-c 产生n个进程 每个进程都反复不停的计算随机数的平方根
-i 产生n个进程 每个进程反复调用sync(),sync()用于将内存上的内容写到硬盘上
-m --vm n 产生n个进程,每个进程不断调用内存分配malloc和内存释放free函数
--vm-bytes B 指定malloc时内存的字节数 (默认256MB)
--vm-hang N 指定在free钱的秒数
-d --hadd n 产生n个执行write和unlink函数的进程
-hadd-bytes B 指定写的字节数
--hadd-noclean 不unlink
模拟一个 CPU 使用率 100% 的场景
$ stress --cpu 1 --timeout 600
模拟 I/O 压力,即不停地执行 sync
$ stress -i 1 --timeout 600
模拟是 8 个进程过载
$ stress -c 8 --timeout 600
sysbench
sysbench 可以进行以下测试:
CPU 运算性能测试
磁盘 IO 性能测试
调度程序性能测试
内存分配及传输速度测试
POSIX 线程性能测试
数据库性能测试(OLTP 基准测试,需要通过 /usr/share/sysbench/ 目录中的 Lua 脚本执行,例如 oltp_read_only.lua 脚本执行只读测试)
以 10 个线程运行 5 分钟的基准测试,模拟多线程切换的问题
$ sysbench --threads=10 --max-time=300 threads run
sysstat
-
mpstat
一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU的性能指标,以及所有CPU的平均指标。
-
pidstat
一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。
每隔 1 秒输出 1 组数据(需要 Ctrl+C 才结束)
-w 参数表示输出进程切换指标,而 -u 参数则表示输出 CPU 使用指标
$ pidstat -w -u 1
每隔 1 秒输出一组数据(需要 Ctrl+C 才结束)
-wt 参数表示输出线程的上下文切换指标
$ pidstat -wt 1
-
vmstat
分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数。
每隔 1 秒输出 1 组数据(需要 Ctrl+C 才结束)
$ vmstat 1
/proc
man proc
- /interrupts
- /stat
- /[pid]/stat