【问题标题】:Java XmX = Do I have to set it to prevent Linux OOMJava XmX = 我必须设置它以防止 Linux OOM
【发布时间】:2011-10-19 02:46:28
【问题描述】:

只是我的整个 Linux 机器因 OOM 崩溃(OOM Killer 进程杀死了错误的进程),原因是 Java 应用程序消耗了太多内存并且没有剩余内存。

我的问题是,如果我使用 JVM 参数 -XmX,这是否会限制 Java 不再使用 -XmX 选项指定的内存?或者换一种说法,如果我不指定 -XmX,那么 java 可能会分配越来越多的内存,结果我的 linux 机器会因 OOM 而崩溃?

非常感谢! 延斯

【问题讨论】:

    标签: java linux out-of-memory


    【解决方案1】:

    有一个默认的最大堆大小(以前是 64M,我认为现在是 128M。) -Xmx 参数更改了该最大大小。 Oracle 的 JVM 永远不会分配比该参数中指定的更大的堆。

    这并不是说 -Xmx 给出了 JVM 使用的 RAM 总量;它实际上会使用更多。有些是针对 JVM 实现本身的可执行代码;还有用于“permgen”区域的内存,可能还有用于其他目的的内存映射缓冲区。但无论如何,Oracle 的 JVM 不会无限制地增加 RAM 使用量。总是有上限的。

    现在,为什么您的 Linux 机器没有更多的交换空间?它很便宜,而且它会从一开始就防止这种事情发生。

    【讨论】:

      【解决方案2】:

      Java 6 的默认最大值是主内存的 1/4。这可能意味着您的应用程序的总虚拟内存可能会超过主内存和交换空间。

      考虑到内存成本(8 GB 成本不到 40 英镑),您应该购买更多内存。但是,另一种方法是使用更少的内存或增加交换空间,这样您就不太可能用完。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-09
        • 2013-12-23
        • 1970-01-01
        • 2013-02-13
        • 1970-01-01
        • 2011-08-29
        • 2021-09-14
        • 1970-01-01
        相关资源
        最近更新 更多