2013-04-01 32 views
2

我在catalina.sh中設置CATALINA_OPTS,但很奇怪,這個值似乎被忽略。我在一臺擁有768M RAM的機器上。以下是重現步驟Tomcat 7 - 無法獲取CATALINA_OPTS堆大小工作

我在啓動Tomcat之前通過運行free -m來檢查內存。我得到以下

total  used  free  shared buffers  cached 
    768   43  724   0   0   16 

我已經設置了CATALINA_OPTS在catalina.sh的第一線,像這樣:

export CATALINA_OPTS="-Xms64M -Xmx256M" 

我然後使用啓動Tomcat ./startup.sh

我檢查Tomcat的花參數做了ps aux | grep tomcat。我得到以下的結果,這似乎表明,設置讀取

根1164 26.0 6.2 1232968 49116點/ 0 S1中10:30 0:01 在/ usr/bin中/ JAVA -Djava.util.logging .config.file =/usr/share/apache-tomcat-7.0.39/conf/logging.properties -Djava.util.logging.manager = org.apache.juli.ClassLoaderLogManager -Xms64M -Xmx256M -Djava.endorsed .dirs =/usr/share/apache-tomcat-7.0.39/endorsed -classpath /usr/share/apache-tomcat-7.0.39/bin/bootstrap.jar:/usr/share/apache-tomcat-7.0.39 /bin/tomcat-juli.jar -Dcatalina.base =/usr/share/apache-tomcat-7.0.39 -Dcatalina.home =/usr/share/apache-tomcat-7.0.39 -Djava.io.tmpdir = /usr/share/apache-tomcat-7.0。 39/TEMP org.apache.catalina.startup.Bootstrap開始

我再次運行free -m,但我得到

 total  used  free  shared buffers  cached 
     768  558  209   0   0   20 

這表明,使用512MB。 我不知道我在做什麼錯。我也嘗試設置JAVA_OPTS,但那也不起作用。

我在CentOS 6 JDK7和Apache Tomcat 7.

EDIT 1:下面是如果我分別

 total  used  free  shared buffers  cached 
     768  432  335   0   0   39 

設置-Xmx值128和64的結果
 total  used  free  shared buffers  cached 
     768  366  401   0   0   32 

看起來像-Xms設置根本沒有任何作用,並且使用-Xmx設置的值大約超過250MB。

這很難解釋。這是一個普通的香草Tomcat 7安裝,沒有安裝webapps(默認的除外)。當然,他們不需要250 MB,是嗎?

回答

1

請注意,堆不是Java獲取的唯一內存塊。另外,如果tomcat的啓動進程使用超過64M,則JVM將高興地分配更多的內存直到-Xmx值。但這不是所有事情 - 各種堆棧的堆棧都需要內存,以及要加載的類。還有在堆內存上的PermGen內存。

查看this article瞭解更多關於您正在處理的各種內存的討論。考慮到今天的內存價格,升級服務器以獲得更多內存可能會更便宜,而不是擔心在此級別優化應用程序的內存消耗。

+0

嗨,感謝您的回答。我怎樣才能找到250MB的內容。我雖然Tomcat是一個精簡的容器,但250 MB的未使用數量太多了。 – arahant

+1

使用jconsole,與jdk一起交付的工具,以連接到您的流程。這至少會對分配的資源進行一些概述。它不會在逐字節級別上工作,但會給您更多關於可能已分配內存的印象。另外,請記住,Java進程提供諸如熱點編譯器之類的東西,通常針對長時間運行的進程中的性能進行了優化,而不是最小的內存佔用量。您可能會停用幾個jvm功能來交易內存,但首先購買更多內存會更便宜。 –

+0

PermGen空間大約150MB。減少到一半 – arahant