Perf 是用来进行软件性能分析的工具,可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计,用来分析内核和应用程序的性能。
1.top查看系统各进程资源使用情况发现sysbench资源消耗大,定位具体代码瓶颈.
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
5.enter键展开sysbench的函数调用关系:
分析出finish_task_switch函数消耗资源最大,然后在代码中找到该方法,查看具体实现并调优,
调优后回归验证调优是否有效.
6.如果是java进程的话,还可以查看进程中的线程使用的堆栈信息,协助定位问题
1.top查看对cpu使用率最高的java进程pid
2.top -aux| grep pid,确定是否是tomcat进程导致.
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.若:
1.mysql进程高,一般是慢查询导致,需要代开慢查询,查看慢查询日志,定位具体
的sql语句,然后查看其执行计划.
2.PHP进程高,结合perf工具,最终热点函数,定位函数调用关系,排查具体的函
数或方法性能问题.
3.java进程高:
1.top查看对cpu使用率最高的java进程pid
2.top -aux| grep pid,确定是否是tomcat进程导致.
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的使用情况.
1.用户态(us%)cpu高,说明用户态进程占用了较多cpu,需重点排查那个进程导致的性能问题.
2.系统态(sys%)cpu高,说明内核占用了较多cpu,需重点排查内核线程或系统调用性能问题.
3.I/O等待cpu高,说明等待I/O时间长,需排除系统存储是不是出现了I/O性能问题.
本文转载自: https://blog.csdn.net/qq_40132294/article/details/121450895
版权归原作者 chuntian_tester 所有, 如有侵权,请联系我们删除。
版权归原作者 chuntian_tester 所有, 如有侵权,请联系我们删除。