【发布时间】:2011-03-31 15:28:33
【问题描述】:
我有一个不能为 Java 进程提供超过 1.5 Gb 的系统。因此,我需要一种精确的方法来指定 java 进程设置,包括 java 中的所有内存类型和可能的 fork。
一个具体的java进程和系统来说明我的问题:
我目前的环境是Ubuntu Linux 9.10下的java 1.6.0_18。
我使用以下 JVM 选项启动大型 Java 服务器进程: "-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m"
现在,“top”命令报告该进程使用 1.6gb 内存...
问题:
1 - java进程使用的最大空间是如何计算的?如果可能,请提供准确的公式。 (Smth.like:max.heap + max.perm + stack + jvm 空间 = 最大空间)
2 - 在我的情况下,Linux 下臭名昭著的分叉行为是什么?分叉的 JVM 是否会占用额外的 1.6 GB(导致总共 3.2 Gb 的已用内存)?
3 - 必须使用哪些选项来绝对确保在任何时候使用不超过 1.5gb?
谢谢
@rancidfishbreath:“ulimit”将确保 java 不能占用超过指定数量的内存。我的目的是确保 java 永远不会尝试这样做。
【问题讨论】:
-
我无法回答前两个问题,但您应该查看 ulimit 以帮助您解决第三个问题。 Ulimit 不是跨平台的,但它会在 Linux 下为您提供帮助。
标签: java jvm memory-management