面试题35:工作中如何针对jvm进行调优?

2023-05-09 21:40:36 浏览数 (1)

【对于正常运行的系统】

  • 使用jmap来查看JVM中各个区域的使用情况。
  • 使用jstack来查看线程的运行情况,比如:哪些线程阻塞、是否出现了死锁。
  • 使用jstat命令来查看垃圾回收情况,特别是fullGC,如果fullGC比较频繁,那么就得进行调优了
    • 初步猜测频繁发生fullGC的原因。如果频发发生fullGC但是却一直没有出现内存溢出,那么表示fullGC实际上是回收了很多对象了,所以这些对象最好能在youngGC里就直接回收掉,避免这些对象进入老年代。对于这种情况,就要考虑这些存活时间不长的对象是不是比较大,导致年轻代放不下而直接进入了老年代。那么我们尝试加大年轻大的大小,如果改完后,fullGC减少了,则表明修改是有效果的。
  • 通过jConsoleVisualVM等工具来进行分析

【对于已经发生了OOM的系统】

  • 一般生产系统中都会设置当系统发生了OOM时,生成当时的dump文件 -XX: HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/base
  • 我们可以通过jConsole、VisualVM等工具来进行分析
  • 根据dump文件找到异常的实例对象和异常的线程(占用CPU高),定位到具体的代码,然后再进行详细的分析和调试

0 人点赞