- Создается более 1000 потоков Jetty
- Среди них около 200 потоков находились в заблокированном состоянии (обратная трассировка добавлена ниже).
- На этом этапе приложение перестает отвечать на запросы и в конечном итоге умирает (OOM)
Я обнаружил в системе неперехваченное исключение и обращаюсь за разъяснениями по основной причине. Приведенная ниже трассировка стека показывает, что поток заблокирован при попытке получить блокировку объекта PrintStream. Не могли бы вы помочь уточнить, что может быть причиной этой блокировки? Существует ли конкретное условие или известная проблема, которая может привести к возникновению этого неперехваченного исключения?
Стековая трассировка заблокированного потока:
Код: Выделить всё
"@365a6a43-660" #660 prio=5 os_prio=0 cpu=0.79ms elapsed=0.90s tid=0x0000559958d13150 nid=0x16bb waiting for monitor entry [0x00007f96e6bfc000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.io.PrintStream.write(java.base@17.0.7/PrintStream.java:696)
- waiting to lock (a java.io.PrintStream)
at java.io.PrintStream.print(java.base@17.0.7/PrintStream.java:863)
at java.lang.ThreadGroup.uncaughtException(java.base@17.0.7/ThreadGroup.java:1084)
at java.lang.ThreadGroup.uncaughtException(java.base@17.0.7/ThreadGroup.java:1077)
at reactor.core.scheduler.Schedulers.handleError(Schedulers.java:1208)
at reactor.core.scheduler.ExecutorScheduler.schedule(ExecutorScheduler.java:70)
at reactor.core.publisher.MonoPublishOn$PublishOnSubscriber.trySchedule(MonoPublishOn.java:146)
at reactor.core.publisher.MonoPublishOn$PublishOnSubscriber.onNext(MonoPublishOn.java:120)
at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79)
at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2398)
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2194)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onSubscribe(FluxOnErrorResume.java:74)
at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55)
at reactor.core.publisher.Mono.subscribe(Mono.java:4400)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)
at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.onError(FluxTimeout.java:219)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:172)
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onError(Operators.java:2063)
at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onError(FluxOnAssembly.java:544)
at reactor.core.publisher.FluxMap$MapSubscriber.onError(FluxMap.java:134)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106)
at reactor.core.publisher.Operators.error(Operators.java:198)
at reactor.core.publisher.MonoErrorSupplied.subscribe(MonoErrorSupplied.java:56)
at reactor.core.publisher.Mono.subscribe(Mono.java:4400)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)
at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:278)
at org.eclipse.jetty.reactive.client.internal.AbstractSingleProcessor.onError(AbstractSingleProcessor.java:120)
at org.eclipse.jetty.reactive.client.internal.ResponseListenerProcessor.onComplete(ResponseListenerProcessor.java:141)
at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:213)
at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:205)
at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:477)
at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:457)
at org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:553)
at org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:149)
at org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:298)
at org.eclipse.jetty.client.HttpSender.abortRequest(HttpSender.java:280)
at org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:385)
at org.eclipse.jetty.client.HttpSender.lambda$executeAbort$0(HttpSender.java:252)
at org.eclipse.jetty.client.HttpSender$$Lambda$2278/0x0000000801a3a400.run(Unknown Source)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:894)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1038)
at java.lang.Thread.run(java.base@17.0.7/Thread.java:833)
Код: Выделить всё
"@365a6a43-659" #659 prio=5 os\_prio=0 cpu=0.91ms elapsed=0.90s tid=0x00007f97186787d0 nid=0x16ba runnable \[0x00007f96e6cfd000\]
java.lang.Thread.State: RUNNABLE
at java.lang.StackTraceElement.initStackTraceElements(java.base@17.0.7/Native Method)
at java.lang.StackTraceElement.of(java.base@17.0.7/StackTraceElement.java:541)
at java.lang.Throwable.getOurStackTrace(java.base@17.0.7/Throwable.java:839)
- locked \ (a java.util.concurrent.RejectedExecutionException)
at java.lang.Throwable.printEnclosedStackTrace(java.base@17.0.7/Throwable.java:701)
at java.lang.Throwable.printStackTrace(java.base@17.0.7/Throwable.java:682)
- locked \ (a java.io.PrintStream)
at java.lang.Throwable.printStackTrace(java.base@17.0.7/Throwable.java:659)
at java.lang.ThreadGroup.uncaughtException(java.base@17.0.7/ThreadGroup.java:1086)
at java.lang.ThreadGroup.uncaughtException(java.base@17.0.7/ThreadGroup.java:1077)
at reactor.core.scheduler.Schedulers.handleError(Schedulers.java:1208)
at reactor.core.scheduler.ExecutorScheduler.schedule(ExecutorScheduler.java:70)
at reactor.core.publisher.MonoPublishOn$PublishOnSubscriber.trySchedule(MonoPublishOn.java:146)
at reactor.core.publisher.MonoPublishOn$PublishOnSubscriber.onNext(MonoPublishOn.java:120)
at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79)
at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2398)
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2194)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onSubscribe(FluxOnErrorResume.java:74)
at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55)
at reactor.core.publisher.Mono.subscribe(Mono.java:4400)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)
at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
at reactor.core.publisher.SerializedSubscriber.onError(SerializedSubscriber.java:124)
at reactor.core.publisher.FluxTimeout$TimeoutMainSubscriber.onError(FluxTimeout.java:219)
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onError(MonoFlatMap.java:172)
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onError(Operators.java:2063)
at reactor.core.publisher.FluxOnAssembly$OnAssemblySubscriber.onError(FluxOnAssembly.java:544)
at reactor.core.publisher.FluxMap$MapSubscriber.onError(FluxMap.java:134)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:106)
at reactor.core.publisher.Operators.error(Operators.java:198)
at reactor.core.publisher.MonoErrorSupplied.subscribe(MonoErrorSupplied.java:56)
at reactor.core.publisher.Mono.subscribe(Mono.java:4400)
at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:103)
at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
at reactor.core.publisher.FluxPeek$PeekSubscriber.onError(FluxPeek.java:222)
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onError(MonoIgnoreThen.java:278)
at org.eclipse.jetty.reactive.client.internal.AbstractSingleProcessor.onError(AbstractSingleProcessor.java:120)
at org.eclipse.jetty.reactive.client.internal.ResponseListenerProcessor.onComplete(ResponseListenerProcessor.java:141)
at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:213)
at org.eclipse.jetty.client.ResponseNotifier.notifyComplete(ResponseNotifier.java:205)
at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:477)
at org.eclipse.jetty.client.HttpReceiver.terminateResponse(HttpReceiver.java:457)
at org.eclipse.jetty.client.HttpReceiver.abort(HttpReceiver.java:553)
at org.eclipse.jetty.client.HttpChannel.abortResponse(HttpChannel.java:149)
at org.eclipse.jetty.client.HttpSender.terminateRequest(HttpSender.java:298)
at org.eclipse.jetty.client.HttpSender.abortRequest(HttpSender.java:280)
at org.eclipse.jetty.client.HttpSender.abort(HttpSender.java:385)
at org.eclipse.jetty.client.HttpSender.lambda$executeAbort$0(HttpSender.java:252)
at org.eclipse.jetty.client.HttpSender$$Lambda$2278/0x0000000801a3a400.run(Unknown Source)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:894)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1038)
at java.lang.Thread.run(java.base@17.0.7/Thread.java:833)
Locked ownable synchronizers:
Другие соответствующие версии библиотек (например, netty, ...): Jetty 11.0.11
Версия JVM ( java -version): 17.0.7
Операционная система и версия (например, uname -a): Linux
Я ожидаю, что трафик будет отправляться непрерывно. Хотя приложение может выйти из строя из-за высоких задержек сервера, само приложение не должно аварийно завершить работу.
Подробнее здесь: https://stackoverflow.com/questions/791 ... ication-cr
Мобильная версия