0


CPU分析系列--perf 通过对热点函数抓取分析具体代码对cpu的消耗

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 所有, 如有侵权,请联系我们删除。

“CPU分析系列--perf 通过对热点函数抓取分析具体代码对cpu的消耗”的评论:

还没有评论