【问题标题】:Java Glassfish issueJava Glassfish 问题
【发布时间】:2013-02-28 15:02:58
【问题描述】:

我有一个问题让我发疯,需要你的帮助。 设置如下: - 处理器 4 核 + HT(所以 linux 说 8 cpus) -centos - glassfish 3(最新版本) - 在 glassfish 上只有一个应用程序正在运行,http-listener1 监听端口 8080(管理员监听器打开,https 关闭) - 有一个连接池

几天后一切正常,然后突然停止: - 负载达到 400 - java进程的cpu使用率达到800 - gf 停止服务页面,或者服务速度极慢: - 管理员监听器(端口 4848)运行正常 - 我启动分析器,一切似乎都运行良好,但我找不到问题所在

我没有更多的想法去哪里寻找以及如何解决问题。当大量用户访问该网站时似乎会出现问题,但问题是即使没有任何用户,gf 也永远不会恢复。

有什么想法吗?

EDIT 粘贴评论中的 JVM 设置:

JVM 设置:

<jvm-options>-Xms10240m</jvm-options> 
<jvm-options>-Xmx10240m</jvm-options> 
<jvm-options>-XX:CMSIncrementalDutyCycle=10</jvm-options>  
<jvm-options>-XX:CMSIncrementalDutyCycleMin=10</jvm-options>  
<jvm-options>-XX:+CMSIncrementalMode</jvm-options>  
<jvm-options>-XX:+CMSIncrementalPacing</jvm-options>  
<jvm-options>-XX:+UseConcMarkSweepGC</jvm-options>  
<jvm-options>-XX:MaxPermSize=512m</jvm-options>  
<jvm-options>-XX:NewRatio=2</jvm-options>  
<jvm-options>-XX:PermSize=512m</jvm-options>

【问题讨论】:

  • 垃圾收集是你该看看的...
  • 如果是 GC,它会在几分钟后恢复工作,当它卡住时会卡住几天
  • 检查线程转储也可能值得一看。也许它揭示了这个过程实际上在做什么。

标签: java glassfish


【解决方案1】:

服务器可能会陷入几乎无限期的 GC 抖动。这种情况在服务器上持续了大约 3.5 小时,而没有引发 OutOfMemory 错误...

我们使用的框架中存在内存泄漏。我们做了什么:

然后,解决问题。

  • 另外,可能没有内存泄漏,只是需要调整GC settings
  • 打开GC logging 看看发生了什么可能是明智的

【讨论】:

    【解决方案2】:

    这 800% 的 CPU 使用率看起来像是分配失败。

    当您启用 CMS 时,GC 会尝试以比您的应用程序消耗的速度更快的速度释放内存。分配失败是指它无法满足此要求。在这种情况下,JVM 唯一的解决方案是使用 ParallelGC 运行完整的集合,这意味着:

    • 您的服务器已完全停止
    • ParallelGC 尝试使用所有可能的 CPU 尽快完成

    您应该启用 GC 日志记录以确保此分配失败假设是正确的 (-Xloggc:gc.log -XX:+PrintGCDetails)。每个“Full GC”行都是一次分配失败。

    获得 GC 日志后,尝试使用the following scripts 查看 iCMS 占空比是否真的在 10% 左右的 CPU 使用率。 here有更详细的解释。

    正如@ppeterka 所说,您可以分析您的应用程序以减少内存消耗,但您也可以给它更多内存。不要为-Xms-Xmx 设置相同的值,并删除标志-XX:CMSIncrementalDutyCycle-XX:CMSIncrementalDutyCycleMin

    希望有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      • 2013-09-20
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多