Java XmX = 我是否必须设置它以防止 Linux OOM

发布于 2024-11-27 17:10:45 字数 235 浏览 1 评论 0原文

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

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

非常感谢! 延斯

just my complete Linux box crashed with OOM (OOM Killer Process killed the wrong processes), due to a java application consumed too much memory and there was no memroy left.

My question is, if I use the JVM Paramter -XmX, does this limit Java to no more use Memory as specified by the -XmX option? Or said differently, If I do NOT specify the -XmX than java might allocate more and more memory with the result my linux box is crahsing itself with OOM?

Thank you very much!
Jens

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

彩扇题诗 2024-12-04 17:10:45

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

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

The default maximum for Java 6 is 1/4 of the main memory. This can mean the total virtual memory of your applications can exceed the main memory and swap space.

Given the cost of memory (8 GB costs less than £40) you should buy more memory. However, an alternative is to use less memory or increase the swap space, so you are less likely to run out.

情话已封尘 2024-12-04 17:10:45

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

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

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

There's a default maximum heap size (used to be 64M, I think it's 128M now.) The -Xmx parameter changes that maximum size. Oracle's JVMs will never allocate a larger heap than specified in that parameter.

That's not to say that -Xmx gives the total amount of RAM used by the JVM; it'll actually use more than that. Some is for the executable code of the JVM implementation itself; there's also memory used for the "permgen" area, and possibly memory-mapped buffers for other purposes. But Oracle's JVMs, in any event, will not grow their RAM usage without bound; there's always an upper limit.

Now, why doesn't your Linux box have more swap space? It's cheap, and it would prevent this sort of thing from happening in the first place.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文