1380 words, 4 mins
Linux 性能优化学习,第二周总结
发现作者的总结很完善,还整理成了表格
常用的 3 大工具针对的指标:
拿几个工具讲一下使用心得
atop
以前没怎么用过atop
,使用了一下,感觉面板非常全面,CPU,MEM,NETIO,DISKIO
都有很好的展示
可以看到上图中,MEM
, SWP
都是红的,8G 的内存基本耗尽了,按m
键可以按MEM
占用排序,按i
键后可以设置刷新时间,默认是10s
,可以设置成3
s
dtat
这个滚动显示的工具其实很强,可以全面显示系统资源情况
这是以前做性能压测的时候显示的信息,命令是dstat -tfvnrl
,可以看到4 个cpu
都超过 70%,int,csw
也比较高8000+
perf
perf record -g
+ perf report
这个组合非常好用,能看到占用高 CPU进程的调用堆栈,但是对没有符号的进程是看不到的
比如这里的 vdsd 进程,没法展开了,所以在编译程序的时候最好是能加上调试符号信息,只是增加一点文件大小,但对后续调试分析会有很大帮助,当然相反如果你不想让别人分析你的程序,那么你就把调试符号干掉。
一个CPU 100%解决的真实案例
- 使用 htop 发现 cpu 100%
- 查看到进程是
puma
几乎占满了 cpu - 使用
strace -p pid
,发现获取不到什么log - 使用
ps -efL | grep puma
, 获取到一堆的线程
ubuntu 4549 16342 4549 0 9 May19 ? 00:00:00 puma: cluster worker 0: 16342 [payment]
ubuntu 4549 16342 4551 0 9 May19 ? 00:00:00 puma: cluster worker 0: 16342 [payment]
ubuntu 4549 16342 4558 0 9 May19 ? 00:00:00 puma: cluster worker 0: 16342 [payment]
ubuntu 4549 16342 4585 0 9 May19 ? 00:00:29 puma: cluster worker 0: 16342 [payment]
ubuntu 4549 16342 4587 0 9 May19 ? 00:00:03 puma: cluster worker 0: 16342 [payment]
ubuntu 4549 16342 4588 0 9 May19 ? 00:01:10 puma: cluster worker 0: 16342 [payment]
ubuntu 4549 16342 4589 0 9 May19 ? 00:00:01 puma: cluster worker 0: 16342 [payment]
ubuntu 4549 16342 4590 0 9 May19 ? 00:00:00 puma: cluster worker 0: 16342 [payment]
ubuntu 4549 16342 8450 0 9 May24 ? 00:00:03 puma: cluster worker 0: 16342 [payment]
这里的第 2,3,4 列分别代表 ppid pid threadid
- 再使用strace -p threadId, 发现一堆的网络请求, 一些数据库查询请求操作关键字
- 然后使用tcpdump抓包,获取cap文件,再用 wireshark 打开发现确实是一堆的查询
tcpdump tcp port 9997 -vvv -nnn -s0 -w qxt_oqc.cap
- 交给后台程序员,发现是个数据库操作,异常后会retry,然后就无限retry
- 改掉重启,问题解决