Почему столько потоков java daemon запускается для каждого потока пользовательских запросов? - PullRequest
2 голосов
/ 09 апреля 2020

В последнее время хост linux не работает из-за нехватки ресурсов. И в ходе дальнейшего исследования я обнаружил, что для экземпляра JVM запущено слишком много потоков, более 3000 потоков ... После некоторого тестирования я обнаружил множество потоков демонов с именем «hystrix-», созданных для каждого доступа, и даже поток пользователя был закрыто, эти запущенные потоки демона не закрываются. Результат PID jstack показан ниже:

2020-04-09 14:42:14
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.171-b11 mixed mode):

"hystrix-dcpms-service-biz-flow-20" #124 daemon prio=5 os_prio=0 tid=0x00007fc44c083800 nid=0x70a9 waiting on condition [0x00007fc43f6eb000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x00000000e59870c8> (a java.util.concurrent.SynchronousQueue$TransferStack)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
        at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
        at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
        at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

"hystrix-dcpms-service-incidence-relation-6" #123 daemon prio=5 os_prio=0 tid=0x00007fc44819c800 nid=0x70a3 waiting on condition [0x00007fc43f7ec000]
   java.lang.Thread.State: WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x00000000ff9c20d8> (a java.util.concurrent.SynchronousQueue$TransferStack)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
        at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
        at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
        at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924)
        at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

Может кто-нибудь, пожалуйста, помогите решить эту проблему? очень ценю.

...