我们正在WAS 8.5.5.2服务器上运行CXF 2.7.11应用程序。应用程序具有类加载父最后一个属性,我们还按照CXF文档中的说明禁用了IBMJaxWS引擎。
应用程序在几天内运行良好,之后我们得到以下异常,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)
所以这有点棘手。您可以简单地增加可以从控制台完成的连接数量:
服务器>WebSphere应用程序服务器>SERVER_NAME>web容器>web容器传输链>TCP CHANNEL
我之所以说这很棘手,是因为可能存在更大的潜在问题,例如连接泄漏。然而,要达到使用2万个连接的程度是相当大的,我不知道你在这台服务器上期望有多少负载。如果这只是一个测试环境,那么您需要开始调查可能的连接泄漏。
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连接。您可能还想看看是谁在进行这些调用,因为这是一种开销。
使用20000个连接是非常高的。您的客户端代码中可能存在漏洞,导致连接泄漏。如果您在客户端中使用CXF,您可以查看以下内容https://issues.apache.org/jira/browse/CXF-5144.
增加连接数不会解决您的问题,只会延迟。