哔前哔言

  • 始终践行费曼学习法
  • 理解系统知识原理
  • 掌握性能分析工具
  • 多实践,多思考,多提问
  • 仅记录个人的学习记录,欢迎指点纠正

1、总结

1、遇到CPU使用率高,但又无法通过top定位到某个进程时,需要考虑是否短时应用所导致

      如:1、应用本身问题,导致反复重启

              2、应用通过exec 调用了其他二进制程序,这些程序运行时间比较短

2、使用top工具查看CPU时,需要同时关注其他参数,比如,运行的进程数,Tasks,%cpu

3、execsnoop专为短时程序设计的工具,通过ftrace来实时监控exec()行为

4、通过这次练习,也对docker进行一些简单命令操作

docker ps -a  // 查看当前所有的容器
docker images  // 所有的镜像
docker rm containId // 删除对应的容器
docker cp  XXX 复制

2、案例实践

其中一台虚拟机A安装nginx 和PHP应用

$ docker run --name nginx -p``10000``:``80``-itd feisky/nginx:sp
$ docker run --name phpfpm -itd --network container:nginx feisky/php-fpm:sp

在另一台的机器B上,使用 curl 访问 http://[VM1 的 IP]:10000,确认 Nginx 已正常启动

## 虚拟机A的IP:192.168.153.132
curl http://192.168.153.132:10000/
It works!jasen@ubuntu:~$ ab -v

通过使用ab工具,模拟并发 100 个请求测试 Nginx 性能,总共测试 1000 个请求。
图片.png

这次,我们在第二个终端,将测试的并发请求数改成 5,同时把请求时长设置为 10 分钟(-t 600)。这样,当你在第一个终端使用性能分析工具时, Nginx 的压力还是继续的。

继续在第二个终端运行 ab 命令:
图片.png

pid查看进程
图片.png

重新压测,然后在第一个终端运行 top 命令,持续观察一段时间(很重要),下图只是某个瞬间的状态:
图片.png

perf 分析 CPU 性能事件

那么,怎么验证是否有大量的 stress 进程呢?既然 top、pidstat 工具无法解决问题,尝试 perf 工具吧,它可以用来分析 CPU 性能事件。如下:

# 记录性能事件,等待大约``15``秒后按 Ctrl+C 退出
$ perf record -g
# 查看报告
$ perf report

图片.png
确实,stress 占了所有 CPU 时钟事件的 67%。你还可以通过 enter 键展开 + 号位置,查看 stress 的调用栈详情
图片.png


南吕十八
5 声望3 粉丝

空白的简介,空白的人生