weblogic 设置多少个GC线程合适

   之前写过一篇Linux下服务器CPU过高的诊断,发现都是在做GC,一个GC线程消耗30%-40%的CPU,一个JVM开启了63个GC线程,消耗了百分之几千的CPU。有很多次CPU飙高的情况可以发现都是GC线程导致,那我们默认的GC线程配置合理吗?

   首先,JVM默认GC线程数量是(ncpus <= 8) ? ncpus : 3 + ((ncpus * 5) / 8)。

   还有跟我们的部署特点有关系,一台PC server 96个逻辑CPU,256G内存,在机器上部署6到10个weblogic服务。

   按照上面的公式计算,每个JVM都可能生成63个GC线程。如果部署10个节点,同一时刻GC,则有630个GC线程,而逻辑CPU只有96个,完全处理不过来。所以如果是与我类似的部署架构,需要限制GC线程的数量-XX:ParallelGCThreads=15。

   好比你们的办公室,里面有20个座位,还有很多公共的区域,如果有一个同事觉得这个办公室都是他的,难免不会与别人产生争用,运气不好被轰出办公室。同样的道理,一个JVM部署在服务器上之后,它会认为这些资源都是它的,要充分利用,这样就不对了。

   为什么要-XX:ParallelGCThreads=15要设置为15呢?不是10或20呢,这个还要用nmon观察服务器的CPU负载和JVM的gc日志,第一要看gc日志,如果full gc的时间能接受,就没问题,如果不能接受,且服务器CPU很闲,那就要再加,综合考量吧。

你可能感兴趣的:(weblogic)