javajava 线程状态的问题

原标题:Linux系统下Java问题排查——cpu使鼡率过高或多java 线程状态锁问题

一个系统、特别是多java 线程状态并发的后台系统在某些特定场景下,可能触发系统中的bug:导致cpu一直居高不下、进程hang了或处理效率低下这种问题往往是由于死循环或java 线程状态锁导致的,如何找到出现问题的地方进而修复问题。下面讲讲遇到这種问题时的一般处理方法:

1、首先使用top命令找出cpu使用率高的进程这步主要是为了获取进程PID。

如下图cpu 使用率较高的是进程编号是 6685

2、通过top命令定位问题进程中每个java 线程状态占用cpu情况。

进程PID6685的每一个java 线程状态占用CPU情况如下图,正常这些java 线程状态cpu使用率是一致变化的如果有哪个java 线程状态cpu使用率一直居高不下,那说明这个java 线程状态可能存在问题

3、通过jstack 命令定位问题代码。

找到上一步中cpu使用率一直高居不下的java 線程状态如PID11319,就将这个PID转换成16进制易知,PID11319转化成16进制为2c37命令定位问题代码所示。

到这一步有些系统就可以看出当前java 线程状态正在運行的代码(函数),这种情况下就可以直接去查看代码寻找问题所在。

在tomcat应用中只能看到当前的java 线程状态名(”http-nio-exec-34”),这时候可以通过日志查到当前java 线程状态正在运行位置命令如下:

附Linux中快速查找文件内容的几个命令。

如下图这是通过如上方法发现一个java 线程状态cpu使用率居高不下,原因是该java 线程状态跑到这个循环了出现死循环。

4、如果是cpu高居不下通过如上方法,通常就可以找到问题所在;但如果当系统中出现死锁或处理效率低的情况cpu使用率并不一定会很高,这时候就需要更进一步寻找问题所在

使用jstack方法获取进程PID6685包含的运行java 線程状态的所有状态。将结果输入在dump.txt文件中查看每个java 线程状态的状态:如果出现BLOCKED和WATING状态的java 线程状态正常就是出现锁的问题所在。具体使鼡如下命令:

下面介绍Jstack的输出中Javajava 线程状态状态的四种状态及可能的原因:

WAITING java 线程状态在无限等待唤醒

我要回帖

更多关于 java线程 的文章

 

随机推荐