gpt4 book ai didi

java - 操作系统能否阻止 Java 进程进行垃圾收集?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:33:07 25 4
gpt4 key购买 nike

我正在使用 AppDynamics 监控生产系统我们只是让系统慢得像爬行,几乎死机了。就在这次 Activity 之前,AppDynamics 显示所有 GC Activity (无论是次要的还是主要的)在几分钟内保持平稳……然后恢复正常。

即使在系统负载极低的时期,我们仍然会看到我们的 JVM 执行一些 GC Activity 。我们从未让它完全变平并降至 0。

此外 - 网络 I/O 与 GC/内存平线在同一时刻变平。

所以我问:系统级别的某些东西会导致 JVM 卡住,或者导致其垃圾收集挂起/卡住吗?这是在 CentOS 机器上。

最佳答案

您的操作系统是否启用了交换。

我注意到,一旦 Java 在启用交换的情况下填满了操作系统上的所有内存,就会出现巨大的问题——它实际上会破坏 Windows 系统,有效地锁定它们并导致重启。

我的理论是这样的:

  • 操作系统内存快满了。
  • 操作系统从 Java 请求内存。
  • 这会触发 Java 进入完全 GC 以尝试释放内存。
  • 完整的 GC 几乎触及 VM 内存的每一 block ,甚至是已被换出的项目。
  • 系统尝试将数据交换回 VM 的内存(在已经没有内存的系统上)
  • 这会滚雪球。

起初它不会对系统造成太大影响,但如果您尝试启动需要大量内存的应用程序,则可能需要很长时间,并且您的系统只会不断降级。

多个大型 VM 会使情况变得更糟,我运行 3 或 4 个大型 VM,当我的 RAM 使用率超过 60-70% 时,我的系统现在开始崩溃。

这是推测,但它描述了我经过几天测试后看到的行为。

效果是所有的交换似乎都在“防止”gc。更准确地说,操作系统花费了大部分 GC 时间交换,这使得它看起来像是在 GC 期间挂起什么都不做。

修复——将 -Xmx 设置为较低的值,将其删除,直到您有足够的空间来避免交换。这一直解决了我的问题,如果它不能解决你的问题,那么我对你问题的原因是错误的:)

关于java - 操作系统能否阻止 Java 进程进行垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16090702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com