【问题标题】:Memory leak with SocksSocketImpl finalize methodSocksSocketImpl finalize 方法的内存泄漏
【发布时间】:2014-03-10 04:20:59
【问题描述】:

我们的一个 Web 应用程序中一直存在 OutOfMemory。此应用程序在 Elastic Load Balancer 后面的 Aamzon EC2 上的 Tomcat 上运行。从堆转储中,SocksSocketImpl 对象消耗了大部分内存。 Yourkit 显示这些对象中有 99% 处于 Pending Finalization 状态。然而,不知何故,它们并没有被最终确定和 GC'ed。在其他地区具有相同设置(相同 tomcat 版本和 JDK 版本)的相同应用程序并且没有问题。

以前有人见过这种行为吗?任何指针都会有所帮助。谢谢你的时间。

【问题讨论】:

  • 您检查/监控您的流量模式了吗?也许您的应用程序有内存泄漏正在接收更多的流量。
  • 感谢您的回复,Rico。交通不是问题。堆上的 Socket 对象数量超过全天流量的 50%。我们也有按小时细分。流量过大绝对不是原因。
  • 奇怪。您是否始终如一地看到这一点?您是否在遇到问题的地区尝试过多次?
  • 是的。它在同一台机器上至少发生了 3 次。
  • 我的意思是不同的机器,而不仅仅是同一地区的同一台机器

标签: java tomcat memory-leaks amazon-ec2


【解决方案1】:

我在运行 Tomcat 6.0.39 时遇到了完全相同的问题,当 Ubuntu 服务器上的 JDK 使用安全补丁升级到时,内存问题就开始了:

java version "1.6.0_30"
OpenJDK Runtime Environment (IcedTea6 1.13.1) (6b30-1.13.1-1ubuntu2~0.12.04.1)
OpenJDK Server VM (build 23.25-b01, mixed mode)

使用 Eclipse 内存分析器进行分析,跟踪到 SSL 连接和休眠会话消耗所有内存的对象的终结器队列。问题通过升级解决:

java version "1.7.0_51"
OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubuntu0.12.04.2)
OpenJDK Server VM (build 24.45-b08, mixed mode)

【讨论】:

    【解决方案2】:

    升级到 JVM 1.7.0_51 后问题得到解决。正如怀疑的那样,在套接字清理或 GC 期间,这似乎是 JVM 级别的问题。有问题的版本是 1.6.0_30 OpenJDK。

    【讨论】:

    • 即使在 AWS beanstalk 上使用 1.7.0_51 我也有这个问题
    【解决方案3】:

    是回归到openjdk包造成的:

    https://bugs.launchpad.net/ubuntu/+source/openjdk-6/+bug/1295987

    已修复,但正在等待部署新的 openjdk6 包。

    【讨论】:

      猜你喜欢
      • 2015-03-13
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 2015-02-17
      • 2013-08-13
      • 2015-03-24
      • 1970-01-01
      相关资源
      最近更新 更多