我在WSO2 ESB 5.0.0中有一个简单的passthrough代理到WSO2 DSS。当我使用esb代理时,加载的实时踏板类增加,直到WSO2 ESB发生故障。当esb发生故障时,有284个线程和14k个类加载。如果我直接使用DSS,dss不会崩溃,最大线程加载104和9k类。
如何强制esb释放该资源,或者改进esb如何处理esb中的http连接?看起来像僵尸连接永远不会释放线程。
任何有助于集中解决问题的帮助?
答案 0 :(得分:1)
没有看到类加载和线程数的问题。我刚刚完成测试新安装的WSO2ESB服务器。
超过550个超过15000个线程的已加载类的总数。即使在这个高负载下,也没有像你提到的任何发行者。
我实际建议的是检查你如何向esb服务发出http请求。它对内容类型,编码等标题很敏感。使用apache httpclient(4.5)
花了很长时间才能找到如何正确调用esb上的soap服务最终可能会发现问题。问题出在DSS和ESB服务器之间。根据源代码,当DSS服务器向ESB服务器写入响应之前,当DSS服务器读取esb发送请求并且DSS服务器读取请求但DSS服务器连接关闭时,会发生此类错误。然后esb服务器报告关于您提到的问题的消息
SourceHandler
...
} else if (state == ProtocolState.REQUEST_DONE) {
isFault = true;
log.warn("Connection closed by the client after request is read: " + conn);
}
易于重现启动esb和dss服务器。开始在ESB上向passthrough代理发送大量请求(对DSS服务的代理请求),关闭DSS服务器,你会看到很多
WARN - SourceHandler Connection closed by the client after request is read: http-incoming-1073 Remote Address
这可能是网络发行者,防火墙或WsoDSS服务器有套接字超时,默认为180秒。