常见问题排查方法
一、CPU过高
1、确定问题进程:top查看CPU过高的线程ID:PID
2、确定问题进程中的问题线程:ps -mp pid -o THREAD,tid,time | sort -rn
3、将线程ID转换成16进制:printf "%x\n" tid
4、打印进程的堆栈信息并定位到问题线程:jstack pid | grep tid -A 30
二、堆转储(dump文件)
a)什么是堆转储?
堆转储是某个时间点应用程序内存的快照。它包含信息,例如内存中的对象是什么,它们携带的值是什么,大小是什么,它们引用的其他对象是什么。
b)堆转储的外观如何?
可以在此处找到样本堆转储。(注意:它将采用二进制格式。因此您实际上无法读取它)。
c)堆转储在哪里使用?
堆转储主要用于解决与内存相关的OutOfMemoryError问题。
d)如何生成堆转储?
可以使用7个不同的选项从运行的应用程序中捕获堆转储。进行堆转储的最常见选项是使用“ jmap”工具。jmap工具位于JDK_HOME \ bin文件夹中。这是您需要发出以捕获的命令:
jmap -dump:format=b,
其中pid:是Java进程ID,应捕获其堆转储,而file-path:是将堆转储写入其中的文件路径。
e)如何理解堆转储?
堆转储文件为二进制格式,并且通常较大。除此之外,它们的格式严重缺乏文档。因此,您必须使用堆转储分析工具(在下一个问题中给出)来分析和理解它们。
f)使用哪些工具来分析堆转储?
以下是使用最广泛的堆转储分析工具:Eclipse MAT,HeapHero和JVisualVM。
参考:https://www.json.cn/blog/2021/0215/p-16984.html
https://www.cnblogs.com/duanxz/p/8510623.html
工具:arthas
三、线程转储
a)什么是线程转储?
线程转储是某个时间点在应用程序中运行的所有线程的快照。它包含有关应用程序中每个线程的所有信息,例如:线程状态,线程ID,本机ID,线程名称,堆栈跟踪,优先级。
b)在哪里使用线程转储?
线程转储主要用于解决生产问题,例如CPU尖峰,应用程序无响应,响应时间短,线程挂起,内存消耗高。
c)如何生成线程转储?
可以使用8个不同的选项从正在运行的应用程序中捕获线程转储。进行线程转储的最常见选项是使用“ jstack”工具。jstack工具位于JDK_HOME \ bin文件夹中。这是捕获线程转储所需发出的命令:
jstack -l <pid> > <file-path>
其中pid:是应捕获其线程转储的应用程序的进程ID,而file-path:是将写入线程转储的文件路径。
d)使用哪些工具来分析线程转储?
这里是使用最广泛的线程转储分析工具:fastThread,Samurai,IBM Thread&Monitor分析器,Visual VM。
参考:https://www.json.cn/blog/2021/0215/p-16984.html

浙公网安备 33010602011771号