CPU分析系列--perf通过对热点函数抓取分析具体代码对cpu的
消耗
⽬录
Perf 是⽤来进⾏软件性能分析的⼯具,可以利⽤ PMU,tracepoint 和内核中的特殊计数器来进⾏性能统计,⽤来分析内核和应⽤程序的性能。
2.下载perf:yum install -y perf
3.perf record -g -p pid 抓取30s数据
4.展⽰⽣成的perf.data⽂件:perf report
1.如果命令失败,需要将perf.data拷贝⾄docker容器内查看:
docker cp perf.data containerId:/tmp
2.进⼊容器:
docker exec -it containerId bash
3.容器内下载perf⼯具
apt-get update && apt-get perf linux-tools procps
4.perf查看perf.data
perf report
<键展开sysbench的函数调⽤关系:
分析出finish_task_switch函数消耗资源最⼤,然后在代码中到该⽅法,查看具体实现并调优,
调优后回归验证调优是否有效.
6.如果是java进程的话,还可以查看进程中的线程使⽤的堆栈信息,协助定位问题
3.查看该java进程中所有线程信息:ps -mp pid -o THREAD,tid,time
4.查看耗时最⾼的线程id:tid=9999
5.将该tid转为16进制:printf "%x\n" tid--->5ff3
6.打印该线程的堆栈信息:jstack pid | grep 5ff3 -A60
7.将⾼耗时线程的堆栈信息给开发查看问题所在.
7.总结:
1.CPU使⽤率分为⽤户态cpu,系统态cpu,等待I/Ocpu,软中断/硬中
断cpu.
1.⽤户态cpu⾼,说明应⽤程序繁忙.
2.系统态cpu⾼,说明系统内核对cpu调⽤率⾼,可考虑更换硬件资源.
3.等待I/Ocpu⾼,即iowait⾼,说明等待io的时间多,说明系统和硬件设备的io交
互时间较长.
2执⾏性能测试时问题排查思路总结:
1.TPS低响应时间⾼,先查看系统资源使⽤情况.
2.若CPU使⽤率中%user⾼,定位是哪个进程导致.
3.若:
的sql语句,然后查看其执⾏计划.
2.PHP进程⾼,结合perf⼯具,最终热点函数,定位函数调⽤关系,排查具体的函
数或⽅法性能问题.
3.java进程⾼:
3.查看该java进程中所有线程信息:ps -mp pid -o THREAD,tid,time
4.查看耗时最⾼的线程id:tid=9999
5.将该tid转为16进制:printf "%x\n" tid--->5ff3
6.打印该线程的堆栈信息:jstack pid | grep 5ff3 -A60
7.将⾼耗时线程的堆栈信息给开发查看问题所在.
4.cpu使⽤率是性能测试中最直观和常⽤的性能指标,排查性能问题时,通常关注的第⼀个指标就是cpu的使⽤情况.grep命令查看进程
1.⽤户态(us%)cpu⾼,说明⽤户态进程占⽤了较多cpu,需重点排查那个进程导致的性能问题.
2.系统态(sys%)cpu⾼,说明内核占⽤了较多cpu,需重点排查内核线程或系统调⽤性能问题.
3.I/O等待cpu⾼,说明等待I/O时间长,需排除系统存储是不是出现了I/O性能问题.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论