通过 top 命令找到 CPU 消耗最高的进程,并记住进程 ID。再次通过 top -Hp [进程 ID] 找到 CPU 消耗最高的线程 ID,然后找到线程ID是十进制的,把他转换成十六进制,然后用jstack找到当前线程的jstack.log的快照,然后分析他的问题。
内存:其实对于内存的话无非就是2种一直是内存溢出,另外一种是内存不健康,就是内存泄露 内存溢出的情况可以通过加上 -XX:+HeapDumpOnOutOfMemoryError 参数,该参数作用是:在程序内存溢出时输出 dump 文件。 有了dump文件,我们找问题就很简单了,比如我们用MAT等等,找到原因 如果是内存泄露的话就得具体分析了 比如你的young GC的频率,和Full GC的频率 ,如果是和平时完全不一样的话,我们也可以用MAT去分析一下看是否是每个对象占用的内存特别大,并且还没有回收他,然后找到这个对象去分析他的逻辑,并且来解决这种内存泄露的问题
从掘金里copy来的,之前看 周志明 的深入理解jvm虚拟机有写到这部分,但是 实际操作过和仅仅看过文档完全是两个概念,果然是需要知行合一啊。
--学习是最公平的事。