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


1 | jstack -l <进程ID> | grep <线程十六进制ID> |

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

下面是将CMS的GC线程数量设置为2的示例:
1 | /path/java -XX:ParallelCMSThreads=2 <other parameters> |
1 | /path/java -XX:CompileThreshold=20000 <other parameters> |
调整编译线程数量,设置-XX:+CICompilerCountPerCPU=true,编译线程数依赖于处理器核数自动配置;设置-XX:+CICompilerCountPerCPU=false -XX:+CICompilerCount=N,强制设定总编译线程数为N。例如,将JIT线程数量设置为4:
1 | /path/java -XX:+CICompilerCountPerCPU=false -XX:+CICompilerCount=4 <other parameters> |