性能分析小案例系列,可以通过下面链接查看哦
https://www.cnblogs.com/poloyy/category/1814570.html
系统架构背景
- VM1:用作 Web 服务器,来模拟性能问题
- VM2:用作 Web 服务器的客户端,来给 Web 服务增加压力请求
- 使用两台虚拟机(均是 Ubuntu 18.04)是为了相互隔离,避免交叉感染
VM2 运行 ab 命令,初步观察 Nginx 性能
简单介绍 ab 命令
- ab(apache bench)是一个常用的 HTTP 服务性能测试工具
- 可以向目标服务器并发发送请求
运行 ab 命令
并发 100 个请求测试 VM1 的 Nginx 性能,总共测试 1000 个请求
ab -c 100 -n 1000 http://172.20.72.58:10000/
从 ab 的输出结果可以看到,Nginx 能承受的每秒平均请求数只有 145.68(有点差强人意)
那到底是哪里出了问题呢
接下来,我们将通过一系列的命令来观察哪里出问题了
通过命令分析 VM1 的性能问题
VM2 长时间运行 ab 命令
并发 5 个请求,持续并发请求 10min
ab -c 5 -t 600 http://172.20.72.58:10000/
接下来的命令都在 VM1 上执行
top 查看系统 CPU 使用率、进程 CPU 使用率、平均负载
top
结果分析
- 平均负载已远超 CPU数量(2)
- Nginx、docker、php 相关的进程总的 CPU 使用率大概 40%左右
- 但是系统 CPU 使用率(us+sy)已达到 96%了,空闲 CPU(id)只剩下 3.7%
提出疑问
为什么进程所占用的 CPU 使用率并不高,但是系统 CPU 使用率和平均负载会这么高?
回答疑问,分析进程列表
- containerd-shim:运行容器的,3.3% 的 CPU 使用率挺正常
- Nginx 和 php-fpm:运行 Web 服务的,占用的 CPU 使用率也才 5-6%
- 再往后就没有什么占用 CPU 使用率的进程了
嘶,发现 top 并没有满足我们的需求,看来得祭出另一个命令了
pidstat 查看是否有异常进程的 CPU 使用率过高
每秒取一次结果