2012-10-05 127 views
3

我有一個關於Java Web應用程序內存使用量的問題..關於Java應用程序的內存使用情況

在任務管理器,Tomcat服務似乎佔據的內存

在jvisualvm,內存使用字節這在Tomcat下部署Java應用程序如下:在Tomcat的Service.bat文件

Heap: 
Used: 2,304,233,184 B 
Size: 8,589,934,592 B 
Max: 10,737,418,240 B 

Permgen: 
Used: 80,272,056 B 
Size: 536,870,912 B 
Max: 536,870,912 B 

內存參數:

-Xms8192m;-Xmx10240m;-XX:PermSize=512m;-XX:MaxPermSize=512m 

現在,我的問題是無論我設置MaxHeapFreeRatio的自由空間是不是縮小,即使使用的空間有時縮小。

任何人都可以告訴我爲什麼這是這樣的行爲..有沒有辦法縮小可用空間,以便在系統上運行的其他進程可以利用它?

我使用JDK 1.7 &的Tomcat 7

回答

2

的最新版本,以與參數-Xms8192m你告訴的Tomcat(當然,在JVM)分配至少8吉布在啓動時的堆空間。

JVisualVM統計支持,但也告訴你,應用程序正在使用2 GiB左右。

將啓動值減小到較低值(從2 GiB開始)。請注意,如果應用程序需要更多的堆空間,則說明它最多可以使用10 GiB -Xmx10240m,因此它可能也值得下調(可能爲4 GiB)。很顯然,如果你開始獲得OOME的,你需要增加值,直到應用程序有足夠的快樂運行(假設沒有內存泄漏等)。

另請注意,進程大小將始終大於堆大小,因爲它還包含JVM本身的perm gen空間(-XX:MaxPermSize=512m)和內部內存/庫。


基本例子:

-Xms512m;-Xmx1536m;-XX:PermSize=64m;-XX:MaxPermSize=256m 

這裏的最小值是512 MIB堆,64 MIB燙髮根,所以最小OS進程大小將是約600 - 650 MIB。由於應用程序分配的空間最多可達最大值(1.5 GiB堆,256 MiB perm gen),因此我預計進程大小將達到大約2 GiB。

現在,如果我們使用你們的價值觀:

-Xms8192m;-Xmx10240m;-XX:PermSize=512m;-XX:MaxPermSize=512m 

的最低值這裏有8吉布堆,512 MIB燙髮根,所以最小OS過程尺寸應在8.6吉布 - ​​幾乎正是你」重新看。

使用最大值,過程大小將達到將近11 GiB。

+0

謝謝Mikaveli ..你的迴應提供了很好的記憶信息。我肯定會減少最小內存的大小,並嘗試..但我的問題是如何使操作系統釋放未使用的內存有效(沒有任何問題),以便其他進程可以使用它.. – vivek4348

+0

一旦它被分配堆空間(高達' -Xmx'),它通常不會將內存釋放回操作系統。相反,只是儘量不要分配超過你的應用程序將使用 - 在你的情況下,你分配6 - 8 GiB多於必要的,這可能被其他進程使用。 – Mikaveli

+0

昨天我經歷了一些文章..你是對的..它不會將內存釋放回操作系統。感謝您的幫助.. – vivek4348

相關問題