2011-06-29 44 views
7

一個Apache Tomcat的(Atlassian的合流)實例是使用以下Java選項啓動更多的內存:Java中使用超過所分配的內存

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 

不應該使用-Xmx指定的內存(堆+ PermGen)的總體消耗量嗎?這導致的問題之一是我無法使用關閉腳本關閉服務器,因爲它嘗試產生具有256MB內存的JVM,由於該JVM不可用而失敗。

+0

也許有一些本地內存分配通過JNI或'ByteBuffer's直接分配回事。 –

+0

@Steve Tayor也許......我不知道Confluence是否知道它是否會這樣做。我已經在Confluence論壇發佈了一個問題,但沒有答案。 – vahidg

回答

3

Tomcat的總內存消耗量應該計算在不少於Xmx + XX:MaxPermSize(在你的情況下,768MB),但我記得在某處看到它可以超越它。 Xmx只是堆空間,而PermGen是堆外(類)。

+4

堆+ permgen + jvm開銷(未指定的數額) –

+0

@Whoho:好吧,它可以運行在512MB,你只需要相應地調整所有的設置。也許'Xms256m,XX:MaxPermSize = 128m'就可以做到。 –