繁体   English   中英

Jboss wildfly 套接字泄漏

[英]Jboss wildfly socket leak

我们的企业应用程序部署在 Jboss wildfly 8.2 中。 问题是,jboss 重启一个月后,文件系统运行速度减慢到十分之一。 即,如果我在我的 apache 中托管了一个大小为 1 GB 的简单静态文本文件,那么将它下载到我的本地机器将在 3 分钟内完成。 但是一个月后,同样的操作需要30分钟。 重新启动 jboss 后,问题会立即消失。 系统中没有明显的 CPU、内存或 IO 峰值。

打开文件的数量接近 550 万,而最多为 570 万。 “lsof -p”的输出只显示了 5k 条记录,而转储整个“lsof”然后 grepping jboss pid 显示了一个巨大的数字。

$$ lsof | wc -l -> 3552282

$$ lsof | awk '{print $2}' | grep jboss-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 2725u sock 0,6 0t0 1247336438 协议:TCP

java 41321 106902 sf-admin 2726u sock 0,6 0t0 1247336439 协议:TCP

我对此没有很好的答案,但如果可以,我建议您升级到 WildFly 10。 看起来在较新版本的 WildFly 中修复了一些漏洞。

看起来所有这些都在 WildFly 9 中得到了修复,如果需要的话,它仍然允许 Java 7。 WildFly 10 需要 Java 8。

自己回答这个问题以记录分析。

我们最终从 1.1.8 分支手动替换了undertow jars。 这与“tcp-keep-alive”和“read-timeout”属性一起为我们解决了这个问题。

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"**/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM