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

目录

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的函数调用关系:

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性能问题.


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性能问题.

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chuntian_tester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值