之前在公司内部分享平台发一篇在生产环境排查的CPU性能问题的文章,比较通用,转到CSDN上与大家分享
问题
业务系统的Tomcat服务器跑了一段时间后,发现业务系统进程占用的CPU资源在70%-80%,加上自助,移动端和报表,整个服务器的CPU处理将近100%运行状态。用户使用时非常慢。
问题查找
通过process explorer查看Tomcat进程下的线程
下载地址: https://technet.microsoft.com/en-us/sysinternals/bb896653/
汉化后的版本:http://download.csdn.net/detail/p_3er/9169985
下载后直接打开运行就可以了。
图一 process explorer主界面
点开tomcat进程:
图二:进程查看
现在服务器处于正常状态,无CPU占用过高的线程,我们以4920 TID线程为例,下面我们要通过jstack把进程下所以的Java线程栈的内容打印出文本中。
可以通过图一发现该tomcat进程pid为5936
图三 查看pid
打开命令行,输入jstack -l 5936 > D:/java.stack
图四 jstack –l
打开java.stack
通过process explorer获取到的线程TID对应的是stack文本线程栈描述内容中的tid的十进制值。
我们把TID为4920转成十六进制为1338,然后在stack文本搜索1338,,找到此线程栈的描述内容为:
图五 查找线程描述
这里都是正常的,如果是不正常的,可以根据描述查看相关代码,进行优化。类似图六,可以查看异常代码所在行数。
图六 查看异常代码所在行数