簡體   English   中英

關於Java Application的內存使用情況

[英]Regarding memory usage of Java Application

我有一個關於java Web應用程序的內存使用的問題..

在任務管理器中,Tomcat服務似乎占用了8,677,544,000字節的內存

在jvisualvm中,在該tomcat下部署的Java應用程序的內存使用情況如下

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

Tomcat的Service.bat文件中的內存參數:

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

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

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

我使用的是最新版本的JDK 1.7和Tomcat 7。

使用參數-Xms8192m您告訴Tomcat(以及JVM)在啟動時分配至少8 GiB的堆空間。

JVisualVM統計數據支持這一點,但也告訴您應用程序正在使用大約2 GiB。

將啟動值降低到較低值(從2 GiB開始)。 請注意,如果應用程序需要更多的堆空間,您已經告訴它最多可以使用10 GiB -Xmx10240m因此可能值得將此值減小(也許為4 GiB)。

顯然,如果你開始獲得OOME,你需要增加值,直到應用程序足夠快樂地運行(假設沒有內存泄漏等)。

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


基本示例:

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

這里的最小值是512 MiB堆,64 MiB perm gen,因此最小OS過程大小約為600 - 650 MiB。

由於應用程序分配更多空間直到最大值(1.5 GiB堆,256 MiB perm gen),我預計流程大小將達到大約2 GiB。

現在,如果我們使用您的值:

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

這里的最小值是8 GiB堆,512 MiB perm gen,因此最小OS過程大小約為8.6 GiB - 幾乎就是你所看到的。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM