Я отлаживаю проблему на сервере Java Grpc, где каждые n минут сервер останавливается при обработке запросов. Я подключил профилировщик, и я сразу вижу проблему, каждые n минут наблюдается скачок числа потоков, а затем через несколько секунд он снова возвращается к нормальному состоянию, и все хорошо в течение следующих n минут. Я взял дамп потока в jvm, когда произошел всплеск потока, и я легко вижу, что есть множество ожидающих потоков. Но оттуда я не могу точно сказать, что вызывает это - см. Пример вывода из дампа потока ниже. Возможно, сервер просто перегружен слишком большим количеством запросов, но я не могу объяснить это снизу:
"grpc-default-executor-1212" - Thread t@4520
java.lang.Thread.State: TIMED_WAITING
at java.base@11.0.1/jdk.internal.misc.Unsafe.park(Native Method)
- parking to wait for <44b4dca3> (a java.util.concurrent.SynchronousQueue$TransferStack)
at java.base@11.0.1/java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:234)
at java.base@11.0.1/java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:462)
at java.base@11.0.1/java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:361)
at java.base@11.0.1/java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:937)
at java.base@11.0.1/java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1053)
at java.base@11.0.1/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1114)
at java.base@11.0.1/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base@11.0.1/java.lang.Thread.run(Thread.java:834)
Locked ownable synchronizers:
- None
Кто-нибудь сталкивался с вышеуказанным и могут ли они объяснить причину? (Использование процессора и куча в порядке, поэтому они не вызывают проблемы) Спасибо