我们的企业应用程序部署在JBoss通配符8.2中。问题是,在jboss重新启动一个月之后,文件系统操作会减慢到十分之一。也就是说,如果我有一个大小为1GB的简单静态文本文件托管在我的apache中,那么下载到本地的文本文件将在3分钟内完成。但一个月后,同样的手术需要30分钟。在重新启动jboss时,问题立即得到解决。系统中没有明显的cpu、内存或IO尖峰。
打开的文件数量接近550万份,最高为570万份。"lsof -p“的输出只显示了5k条记录,而抛出整个"lsof”然后再对jboss表示祝贺则显示了一个巨大的数字。
$$$ lsof _ wc -l -> 3552282
$$$ lsof \ awk '{print $2}‘\print-pid\ wc -l -> 2760622
在jboss打开的270万个文件中,120万个文件显示如下所示。在重新启动jboss之后,打开的文件会减少,但是这个数字会继续增加,最终导致速度缓慢。这肯定指向套接字泄漏,但是如何进一步调试呢?
$$$ grep协议: TCP“/tmp/lsof.41321 -c -> 1203852
java 41321 106902 sf-admin 2724u sock 0,6 0t0 1256280582协议: TCP
java 41321 106902 sf-admin 2725 u sock 0,6 0t0 1247336438协议: TCP
java 41321 106902 sf-admin 2726u sock 0,6 0t0 1247336439协议: TCP
发布于 2016-07-25 20:04:35
我并没有一个很好的答案,但如果可以的话,我建议升级到WildFly 10,如果可以的话。看起来在较新版本的WildFly中有一些漏洞被修复了。
看起来所有这些都是在WildFly 9中修复的,如果这是必需的话,它仍然允许Java7。WildFly 10需要Java8。
发布于 2016-10-04 10:04:26
我自己来回答这个问题来记录分析。
最后,我们从1.1.8分支手工替换了下面的jars。这与“tcp保持活力”和“读取超时”属性一起解决了我们的问题。
undertow-core-1.1.0.Final.jar
undertow-servlet-1.1.0.Final.jar
undertow-websockets-jsr-1.1.0.Final.jar
<http-listener name="default" socket-binding="http" max-parameters="5000" max-post-size="-1" **tcp-keep-alive="true" read-timeout="300000"**/>https://stackoverflow.com/questions/38561846
复制相似问题