JVM线程创建速度非常慢(java.lang.Thread.setPriority0()中的停顿时间很长)

时间:2018-09-27 13:41:35

标签: java multithreading performance jvm

其中一台主机上存在JVM性能问题。

主机是16个CPU内核,16Gb RAM,Windows Server 2012是主机OS。 JVM是1.8 131,Xmx是10Gb,但是2-3Gb足以用于正常操作,并且消耗很少会增加。 该应用程序使用所有内核,但CPU使用率非常低-最高15%。 GC活性低。

在其他主机上运行的具有相同配置的同一应用程序没有性能问题,并且可以根据需要轻松吃掉2-3Gb RAM和CPU。

但是,在此特定主机上,当一些负载开始时,该应用几乎变得无响应。我们已经预定义了几个线程池的核心大小,并且当应用程序开始通过创建新线程来增加线程池时-它几乎卡住了。

线程转储看起来很奇怪。很多长时间运行的java.lang.Thread.setPriority0()正在运行的线程。

赞:

"Thread-14592" #676532 daemon prio=3 os_prio=0 tid=0x0000000026852000 nid=0x15a0 runnable [0x000000003737e000]    
   java.lang.Thread.State: RUNNABLE    
at java.lang.Thread.setPriority0(Native Method)    
at java.lang.Thread.setPriority(Unknown Source)    
at java.lang.Thread.init(Unknown Source)    
at java.lang.Thread.init(Unknown Source)    
at java.lang.Thread.<init>(Unknown Source)    
at java.util.concurrent.Executors$DefaultThreadFactory.newThread(Unknown Source)    
at com.util.NamedThreadFactory.newThread(NamedThreadFactory.java:38)
at java.util.concurrent.ThreadPoolExecutor$Worker.<init>(Unknown Source)    
at java.util.concurrent.ThreadPoolExecutor.addWorker(Unknown Source)    
at java.util.concurrent.ThreadPoolExecutor.execute(Unknown Source)    
at java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
...

setPriority0()可以运行几分钟,因此该主机上的应用程序性能非常糟糕。

我们尝试设置-XX:-UseThreadPriorities,但结果相同。

有人可以给我们一个线索,找到我们描述的行为的原因该怎么看?

1 个答案:

答案 0 :(得分:0)

这确实是一种防病毒软件。

不知道它的特定设置是什么,但是当防病毒软件关闭时,该应用程序将恢复正常的快速运行。