Linux 上的 Java -Xmx 选项不限制内存消耗

标签 java

在 Ubuntu Linux 3.2.0-25-virtual 上使用 Oracle Java 1.7.0_05,在具有 7.5 GB 内存的 amazon EC2 实例上,我们启动三个 java 实例,每个实例使用开关 -Xmx 2000m。

我们使用默认的 Ubuntu EC2 AMI 配置,没有交换空间。

这些实例运行几周后,其中一个实例卡住——可能是内存不足。但我的问题不是寻找内存泄漏。

当我们尝试重新启动应用程序时,java 给我们一条消息,指出它无法分配 2000 mb 内存。我们通过重新启动服务器解决了该问题。

换句话说,2000 + 2000 + 2000 > 7500?

我们已经见过这个问题两次,很抱歉地报告我们没有良好的诊断方法。如果只剩下两个 java 进程,每个进程最多使用 2000 MB,我们怎么会用完空间呢?下次再出现这个问题时,我们应该如何进行诊断呢?我希望我有一个“free -h”输出,在我们无法启动程序时获取,并在此处显示。

TIA。

最佳答案

-Xmx 设置 JVM 堆的最大大小,而不是 java 进程的最大大小,除了可供应用程序使用的堆之外,它还会分配更多内存:自己的内存、永久代、JNI 库中分配的内容等。

关于Linux 上的 Java -Xmx 选项不限制内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12389560/

相关文章:

Java:高效的 ArrayList 过滤?

java - 非法访问: this web application instance has been stopped already

java - 为什么 `h`这个参数在AbstractQueuedSynchronizer中会判断两次是否为null?

java - greenmail 服务器收不到邮件

java - 使用 Spring-Data 配置 MongoDb 时出现异常

java - 中断 shell 输出到文件

java - Java 对象序列化中如何处理对另一个类的静态成员的调用?

java - Apache Commons VFS : working with FTP

java - 如何处理无效输入

java - 使用模式解析包含 GregorianCalendar 的字符串到日期