定位Java程序中占用cpu资源最多线程

版权声明:本博客所有的原创文章,转载请注明出处,作者皆保留版权。 https://blog.csdn.net/anLA_/article/details/80292733

在编程时,有时候有些问题并不会暴露出来,往往等项目上线之后,突然就暴露出一些问题,比如网站相应慢,或者突然崩溃。
当然,网站相应慢可能是多方面的原因,硬件、软件、cpu,io,网络都是可能的点。
本篇文章从cpu角度来分析占用cpu最多线程从而导致网站相应慢的情况。

背景

本文分析基于Ubuntu16 LTS版本下分析

例子

首先通过top命令查看消耗cpu情况:
这里写图片描述

pid为3075的是JVM主进程,而13580的则为我们运行的项目,这可以通过jps命令筛选:
这里写图片描述

下面,通过top带有命令参数查看具体哪一个进程树情况:top -H -p 3075
这里写图片描述
下面看top命令:
这里写图片描述

从top前几行的信息可以看出,使用Application(Spring boot项目)共有一味用户,总共有43个线程,0个处于运行状态。cpu方面,用户使用14.3%,系统使用4.4%,有2.4处于wait状态。第三、四行则为系统的内存信息了。

下面利用jstack命令,将此时刻13580运行堆栈信息输入到jstack_13580.txt中,便于查看:jstack 13580 > jstack_13580.txt
选取top -H -p 13580中pid为13626的进程id,将其转化为16进制为:353a
然后再利用cat jstack_13580.txt |grep 353a 查看这个线程的具体信息:
这里写图片描述

则可以看出此线程处于condition队列中waiting。这只是个例子,项目运行没有相应,所以处于waiting状态。

猜你喜欢

转载自blog.csdn.net/anLA_/article/details/80292733