记一次jstack 处理堆栈溢出

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29493353/article/details/84030532

jstack 应用

首先通过:ps -ef|grep java

得到java pid

查看哪个线程占用最多资源:

找出该进程内最耗费CPU的线程,可以使用ps -Lfp pid或者ps -mp pid -o THREAD, tid, time或者top -Hp pid  命令查看这个进程下面的所有线程占用情况。

发现线程21742占用最多。

将刚刚发现占用cpu最多的线程id(21742)换算成16进制

命令:printf "%x\n" 21742 的到 线程值 :54ee

查看jstack 生成的文件:

jstack pid | grep tid

如:jstack 21711 | grep 54ee

下面可以看出是哪行代码导致,查看那行代码发现有死循环。跟踪解决完毕。

实例:

通过上面的步骤可以看出一个线程里面的create_file.java的75行代码cpu和内存消耗严重。

这个map是一个支持并发的map,里面缓存的数据太多导致一直变大。只要查看map处理的代码就行了。

猜你喜欢

转载自blog.csdn.net/qq_29493353/article/details/84030532