程序性能测试工具
程序处理请求过程中,根据监控发现latency会产生周期性的峰值。因此尝试了多种性能测试工具,记录如下。
vmstat
- 参考
vmstat -at 1 | tee vmstat.log
查看缺页中断
- 参考
watch -n 1 -d 'ps -o majflt,minflt -p pid
- 其中 majflt 与 minflt 的不同是, majflt 表示需要读写磁盘,可能是内存对应页面在磁盘中需要 load 到物理内存中,也可能是此时物理内存不足,需要淘汰部分物理页面至磁盘中
查看进程运行在哪些CPU内核上
- 参考
ps -o pid,psr,comm -p pid
- psr列
taskset -a -p -c 0-30 pid
- 设置pid进程运行在0~30核上
top -H -d 1 -p pid
- 查看pid进程的线程
- 按f,选择需要显示的列
- top命令后按1可显示CPU列表,shift+p排序
查看内存泄露
- valgrind
- 参考
valgrind —leak-check-full --show-leak-kinds=all --log-file=“valgrind.log"
- sanitize
- 参考
- 比valgrind对程序性能影响更小,但需要GCC 4.8以上或使用clang编译
strace
- 参考
strace -cp pid -f
- 统计pid进程所有系统调用的耗时占比
pstack
- 查看线程栈
gprof
- 安装graphviz
sudo yum install graphviz
- 下载gprof2dot.py
gprof -b ./docFeatureServer gmon.out > report.txt
python ./gprof2dot.py -n0 -e0 -s -w report.txt > report.do
dot ./report.dot -T svg -o report.svg
- 参考