机器配置:2 CPU , 8GB 内存 。预先安装 stress 和 sysstat 包 , 如 apt install stress sysstat 。在这里 , 我先简单介绍一下 stress 和 sysstat 。
stress 是一个 Linux 系统压力测试工具 , 这里我们用作异常进程模拟平均负载升高的场景 。
而 sysstat 包含了常用的 Linux 性能工具 , 用来监控和分析系统的性能 。我们的案例会用到这个包的两个命令 mpstat 和 pidstat 。
mpstat 是一个常用的多核 CPU 性能分析工具 , 用来实时查看每个 CPU 的性能指标 , 以及所有 CPU 的平均指标 。pidstat 是一个常用的进程性能分析工具 , 用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标 。此外 , 每个场景都需要你开三个终端 , 登录到同一台 Linux 机器中 。
实验之前 , 你先做好上面的准备 。如果包的安装有问题 , 可以先在 google 一下自行解决 , 如果还是解决不了 , 再来留言区找我 , 这事儿应该不难 。
另外要注意 , 下面的所有命令 , 我们都是默认以 root 用户运行 。所以 , 如果你是用普通用户登陆的系统 , 一定要先运行 sudo su root 命令切换到 root 用户 。
如果上面的要求都已经完成了 , 你可以先用 uptime 命令 , 看一下测试前的平均负载情况:
$ uptime..., load average: 0.11, 0.15, 0.09
场景一:CPU 密集型进程首先 , 我们在第一个终端运行 stress 命令 , 模拟一个 CPU 使用率 100% 的场景:$ stress --cpu 1 --timeout 600
接着 , 在第二个终端运行 uptime 查看平均负载的变化情况:# -d 参数表示高亮显示变化的区域$ watch -d uptime..., load average: 1.00, 0.75, 0.39
最后 , 在第三个终端运行 mpstat 查看 CPU 使用率的变化情况:# -P ALL表示监控所有CPU , 后面数字5表示间隔5秒后输出一组数据$ mpstat -P ALL 5Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)13:30:06CPU%usr%nice%sys %iowait%irq%soft%steal%guest%gnice13:30:11all50.050.000.000.000.000.000.000.000.0013:30:1100.000.000.000.000.000.000.000.000.0013:30:111100.000.000.000.000.000.000.000.000.00
从终端二中可以看到 , 1 分钟的平均负载会慢慢增加到 1.00 , 而从终端三中还可以看到 , 正好有一个 CPU 的使用率为 100% , 但它的 iowait 只有 0 。这说明 , 平均负载的升高正是由于 CPU 使用率为 100%。那么 , 到底是哪个进程导致了 CPU 使用率为 100% 呢?你可以使用 pidstat 来查询:
#间隔5秒后输出一组数据$ pidstat -u 5 113:37:07UIDPID%usr %system%guest%wait%CPUCPUCommand13:37:1202962100.000.000.000.00100.001stress
从这里可以明显看到 , stress 进程的 CPU 使用率为 100% 。场景二:I/O密集型进程首先还是运行stress命令 , 但这次模拟I/O压力 , 即不停地执行sync:
1$ stress -i 1 --timeout 600
还是在第二个终端运行 uptime 查看平均负载的变化情况:$ watch -d uptime...,load average: 1.06, 0.58, 0.37
然后 , 第三个终端运行 mpstat 查看CPU使用率的变化情况:#显示所有CPU的指标 , 并在间隔5秒输出一组数据$ mpstat -P ALL 5 1Linux 4.15.0 (ubuntu)09/22/18_x86_64_(2 CPU)13:41:28CPU%usr%nice%sys %iowait%irq%soft%steal%guest%gnice13:41:33all0.210.0012.0732.670.000.210.000.000.0013:41:3300.430.0023.8767.530.000.430.000.000.0013:41:3310.000.000.810.200.000.000.000.000.00
从这里可以看到 , 1 分钟的平均负载会慢慢增加到 1.06 , 其中一个 CPU 的系统 CPU 使用率升高到了 23.87 , 而 iowait 高达 67.53% 。这说明 , 平均负载的升高是由于 iowait 的升高 。那么到底是哪个进程 , 导致 iowait 这么高呢?我们还是用 pidstat 来查询:
1#间隔5秒后输出一组数据 , -u表示CPU指标$ pidstat -u 5 1Linux 4.15.0 (ubuntu)09/22/18_x86_64_(2 CPU)13:42:08UIDPID%usr %system%guest%wait%CPUCPUCommand13:42:1301040.003.390.000.003.391kworker/1:1H13:42:1301090.000.400.000.000.400kworker/0:1H13:42:13029972.0035.530.003.9937.521stress13:42:13030570.000.400.000.000.400pidstat
可以发现 , 还是stress进程导致的 。场景三:大量进程的场景当系统中运行进程超出 CPU 运行能力时 , 就会出现等待 CPU 的进程 。比如 , 我们还是使用 stress , 但这次模拟的是 8 个进程:
推荐阅读
- Linux下Oracle监听无法启动处理
- 局域网电脑设置共享打印机,百分之百学会,看看您怎么学?
- 电脑蓝屏怎么解决?Win7/Win10系统常见电脑蓝屏原因以及解决方法
- linux下高并发服务器实现
- Linux引导101
- 主图怎么优化 淘宝店铺主图优化怎么做
- 20 个 Linux 终端下的生产力工具
- Linux 中软链接和硬链接的区别
- LINUX系统和Unix系统有什么区别和联系呢?
- 基于Linux系统的高可用中小型网站集群架构说明