哔前哔言
- 始终践行费曼学习法
- 理解系统知识原理
- 掌握性能分析工具
- 多实践,多思考,多提问
- 仅记录个人的学习记录,欢迎指点纠正
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 个请求。
这次,我们在第二个终端,将测试的并发请求数改成 5,同时把请求时长设置为 10 分钟(-t 600)。这样,当你在第一个终端使用性能分析工具时, Nginx 的压力还是继续的。
继续在第二个终端运行 ab 命令:
pid查看进程
重新压测,然后在第一个终端运行 top 命令,持续观察一段时间(很重要),下图只是某个瞬间的状态:
perf 分析 CPU 性能事件
那么,怎么验证是否有大量的 stress 进程呢?既然 top、pidstat 工具无法解决问题,尝试 perf 工具吧,它可以用来分析 CPU 性能事件。如下:
# 记录性能事件,等待大约``15``秒后按 Ctrl+C 退出
$ perf record -g
# 查看报告
$ perf report
确实,stress 占了所有 CPU 时钟事件的 67%。你还可以通过 enter 键展开 + 号位置,查看 stress 的调用栈详情
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。