【问题标题】:Jboss wildfly socket leakJboss Wildfly 套接字泄漏
【发布时间】:2016-11-28 10:43:42
【问题描述】:

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

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

$$$ lsof | wc -l -> 3552282

$$$ lsof | awk '{打印 $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

【问题讨论】:

    标签: java sockets tcp jboss wildfly-8


    【解决方案1】:

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

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

    【讨论】:

    • 不幸的是,升级不是一个简单的选择。找到问题并修补 jboss 是唯一的选择。
    【解决方案2】:

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

    我们最终从 1.1.8 分支手动替换了 undertow jar。这与“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"**/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多