Канал Websphere 8.5 TCP превысил максимальное количество открытых соединений
Мы запускаем приложение CXF 2.7.11 на сервере WAS 8.5.5.2. У приложения есть последнее свойство родительской загрузки классов, также мы отключили механизм IBM JaxWS, как указано в документации по CXF.
Приложение работает нормально пару дней, после чего мы получаем ниже исключения, и канал TCP кажется заполненным.
Из трассировки стека, в которой есть классы ws, я подозреваю, что CXF для этой проблемы, но это может быть результатом другой проблемы
Приложение также является приложением Spring MVC, которое предоставляет ресурсы REST.
[10.11.2014 05:00:20:887 EET] 00000049 TCPChannel W TCPC0004W: TCP Channel TCP_2 has exceeded the maximum number of open connections 20000.
[10.11.2014 05:02:16:343 EET] 0000023f SSLHandshakeE E SSLC0008E: Unable to initialize SSL connection. Unauthorized access was denied or security settings have expired. Exception is javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at com.ibm.jsse2.b.a(b.java:56)
at com.ibm.jsse2.nc.a(nc.java:90)
at com.ibm.jsse2.nc.unwrap(nc.java:292)
at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:26)
at com.ibm.ws.ssl.channel.impl.SSLConnectionLink.readyInbound(SSLConnectionLink.java:535)
at com.ibm.ws.ssl.channel.impl.SSLConnectionLink.ready(SSLConnectionLink.java:295)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1864)
2 ответа
Использование 20000 соединений чрезвычайно высоко. Возможно, в вашем клиентском коде есть ошибки, из-за которых возникают утечки соединений. Если вы используете CXF в клиенте, вы можете взглянуть на этот https://issues.apache.org/jira/browse/CXF-5144.
Увеличение количества соединений не решит вашу проблему, а только задержит ее.
Так что это немного сложно. Вы можете просто увеличить количество соединений, которые можно выполнить с консоли:
Серверы> Серверы приложений WebSphere> SERVER_NAME > веб-контейнер> транспортные цепочки веб-контейнера> TCP CHANNEL
Причина, по которой я сказал, что это сложно, потому что может быть более серьезная проблема, например, утечка соединения. Но до того момента, когда вы используете 20К-соединения, достаточно много, однако я не знаю, какую нагрузку вы ожидаете на этом сервере. Если это просто тестовая среда, то вам нужно начать искать возможную утечку соединения.
Unable to initialize SSL connection. Unauthorized access was denied or security settings have expired. Exception is javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
Эта часть сообщения об ошибке означает, что к SSL-порту подключаются обычные текстовые соединения, отличные от SSL. Вы также можете взглянуть на это и посмотреть, кто делает эти звонки, потому что это накладные расходы.