使用以下Java选项启动Apache Tomcat(Atlassian Confluence)实例:
JAVA_OPTS="-Xms256m -Xmx512m -XX:MaxPermSize=256m -Djava.awt.headless=true "
但是我看到启动后它很快就会占用我虚拟服务器上可用的大部分1GB内存。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6082 root 19 0 1105m 760m 16m S 0.7 74.2 5:20.51 java
整体消耗的内存(heap + PermGen)是否应该保持在使用-Xmx指定的内存之下?这导致的问题之一是我无法使用关闭脚本关闭服务器,因为它尝试生成具有256MB内存的JVM,因为它不可用而失败。
答案 0 :(得分:5)
例如,本机库可以轻松地在Java堆外部分配内存。
Direct ByteBuffer也这样做:http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html
直接缓冲区的内容可以 居住在正常范围之外 垃圾收集堆,等等 对内存占用的影响 申请可能并不明显。
有充分的理由分配庞大的直接ByteBuffers。
答案 1 :(得分:3)
总Tomcat内存消耗应该计算为不超过Xmx + XX:MaxPermSize
(在你的情况下,768MB),但我记得在某个地方可以看到它可以超过它。 Xmx
只是堆空间,而PermGen
在堆之外(种类)。