Мы меняем топологию нашего кластера и сталкиваемся со 100% -ной проблемой ЦП в потоке «I / O-x по умолчанию» (org.xnio.nio.WorkerThread).
Похоже на бесконечный цикл в ConduitStreamSinkChannel.write (..), но я не уверен в этом.
Проблема нерегулярна и не просто воспроизводится, и для ее остановки требуется перезапуск.
Каждый раз, когда он входит в это состояние, дамп потока становится одинаковым:
"default I/O-2" #103 prio=5 os_prio=0 tid=0x00007fd0f83a4800 nid=0x6941 runnable [0x00007fd0e9be0000]
java.lang.Thread.State: RUNNABLE
at java.lang.Throwable.fillInStackTrace(Native Method)
at java.lang.Throwable.fillInStackTrace(Throwable.java:783)
- locked <0x00000007a2be6ec0> (a java.nio.channels.ClosedChannelException)
at java.lang.Throwable.(Throwable.java:250)
at java.lang.Exception.(Exception.java:54)
at java.io.IOException.(IOException.java:47)
at java.nio.channels.ClosedChannelException.(ClosedChannelException.java:52)
at org.xnio.ssl.JsseStreamConduit.write(JsseStreamConduit.java:1022)
at org.xnio.conduits.ConduitStreamSinkChannel.write(ConduitStreamSinkChannel.java:150)
at org.xnio.http.HttpUpgrade$HttpUpgradeState$StringWriteListener.handleEvent(HttpUpgrade.java:385)
at org.xnio.http.HttpUpgrade$HttpUpgradeState$StringWriteListener.handleEvent(HttpUpgrade.java:372)
at org.xnio.ChannelListeners.invokeChannelListener(ChannelListeners.java:92)
at org.xnio.conduits.WriteReadyHandler$ChannelListenerHandler.writeReady(WriteReadyHandler.java:65)
at org.xnio.ssl.JsseStreamConduit.run(JsseStreamConduit.java:393)
at org.xnio.ssl.JsseStreamConduit.writeReady(JsseStreamConduit.java:524)
at org.xnio.ssl.JsseStreamConduit$1.writeReady(JsseStreamConduit.java:287)
at org.xnio.nio.NioSocketConduit.handleReady(NioSocketConduit.java:94)
at org.xnio.nio.WorkerThread.run(WorkerThread.java:567)
Изменение в топологии добавляет несколько групп серверов и меняет обратный прокси-сервер (nginx) для перенаправления (состояние 301) каждого http-соединения на https.
Анализ дампа потока, похоже, имеет отношение к https (пакет org.xnio.ssl. *), , но все, что находится за nginx, просто http.
Наше приложение предоставляет конечную точку Websocket (WSS через nginx) и выполняет множество удаленных вызовов EJB на другие серверы (удаленное взаимодействие по протоколу http, напрямую на другой сервер без прохождения через nginx).
Кроме того, приложение выполняет / принимает некоторые вызовы REST (RESTEasy) на другие серверы в кластере через балансировщик нагрузки (nginx https, чтобы избежать перенаправления 301)
Что может быть причиной этого?
спасибо!