作为一名好的性能测试工程,不仅要测试出系统真实的性能,还需要定位系统的性能瓶颈,协助研发定位分析问题。
一般可以根据数据的流向进行性能各部件的分析,以我现在使用的系统来说数据流向为:用户——网络—应用服务器(tomacat)——后台数据库—数据落地(数据是否写入到数据库或者查询到)
其他:用户——网络-nginx——(中间件)——应用服务器(tomacat)——后台数据库—数据落地(数据是否写入到数据库)
在进行性能分析时,可以一点一点的排查。
此处仅学习如何定位CPU占用过高的进程,并进行定位
一、准备工作
1、高并发的压测脚本(用户登录、查询)
2、可以连接的应用服务器(用户名、密码)
3、稳定的网络环境
二、脚本调试
1、使用jmeter录制完成脚本,进行一次基准测试,保证脚本可用。
2、未进行加测前,先查看空闲时的系统利用率:top 命令直接查看
3、配置测试环境使施压机一直对服务器进行压测在查看服务器的运行状况:
3、使用命令:PS aux | grep Java 查找占用率最高的进行ID:26348
其实在使用top 命令的时候就能查出,资源占用率最高的进程为:Java ,26348上图
4、查看程序中占用资源最大的线程ID:top -H -p 26348
得到Pid=26403
5、将PID=26403转换成16进制:printf“%x\n” 26403,也可以使用其他外部的装换方式
得到Tid=6723
6、使用命令 jstack + (3)中进程 | grep + tid 【-C=线程前后行数,-A =线程后行数 ,-B=线程之前行数】 +数字
jstack 26348 | grep 6723 -C 10 表示:查询程序26348中线程16进制为6723的进程,并显示前后20的代码
总结:
查看进程CPU占用过高的步骤:
1)先使用 【PS aux |grep +关键字】 查找进程ID
2)在使用 【top –H –p +进程ID】取得pid
3) 使用命令【 printf "%x\n"+ pid】将10进制的进程换成16进制Tid
4)然后【jstack (1中的ID) | grep 16进制ID +【-C】 10(前后10行)】