JVM线程优化

原理

业务进程运行期间,JVM会开启回收线程进行及时编译和堆空间管理垃圾回收等操作,JVM运行线程多少对系统性能有直接影响。通过资源监控找到占用CPU较高的JVM线程,并做相关调优处理,能优化业务程序运行性能。

通过下面方法找到占用CPU较高的JVM线程:

  1. 利用top命令找到Java进程ID,如此示例的进程ID是16498。

  2. 利用top -H -p <pid>命令跟踪进程下面各个线程的CPU占用情况,如下图这里取16810线程做示例。

  3. 将线程ID转换成16进制,可以使用Windows操作系统计算器转换,如16810转换为41aa。
  4. 使用jstack命令查询此线程栈信息:

     jstack -l <进程ID> | grep <线程16进制ID>

    可以看出此线程名称是"cronJobScheduler_Worker-8",这个不是JVM的线程。下图中"Gang worker#0 (Parallel GC Threads)"、"Concurrent Mark-Sweep GC Thread"、"Gang worker#1 (Parallel CMS Threads)"都属于JVM线程。

修改方式

  • 增加线程数量会导致CPU利用率上升,上下文切换增多可能会引起业务性能下降,调整参数需要根据业务实际情况进行优化适配。
  • 关闭JIT可能会对业务性能有影响。