1. 程式人生 > >JVM配置優化和記憶體分配情況檢視

JVM配置優化和記憶體分配情況檢視

JVM引數配置和記憶體檢視

一、引數配置的方式

示例tomcat版本為:apache-tomcat-7.0.69

1.     catalina.bat

更改%CATALINA_HOME%/bin下的catalina.bat(catalina.sh)檔案,在開頭加入一行:

set JAVA_OPTS=%JAVA_OPTS% -server -Xms1024M -Xmx1024M -Xmn256M -XX:PermSize=256M -XX:MaxPermSize=256M -Xss256K

對配置檔案有侵入,不建議使用這種方式。

2.     setenv.bat

在%CATALINA_HOME%/bin下增加setenv.bat(setenv.sh)檔案,檔案內容填寫:

set JAVA_OPTS=%JAVA_OPTS% -server -Xms1024M -Xmx1024M -Xmn256M -XX:PermSize=256M -XX:MaxPermSize=256M -Xss256K

set JAVA_OPTS=%JAVA_OPTS% -XX:+DisableExplicitGC -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC

配置檔案Readme中建議的方式,推薦使用。如果通過startup.bat(sh)啟動tomcat,配置生效;但如果通過tomcat7.exe或者tomcat7w.exe啟動tomcat,這裡的配置不生效。

3.     tomcat7w.exe

更改tomcat7w.exe檔案java標籤頁下的Java Options,加入相應的配置項:

-Xms1024M

-Xmx1024M

-Xmn256M

-XX:PermSize=256M

-XX:MaxPermSize=256M

-Xss256K

-XX:+DisableExplicitGC

-XX:SurvivorRatio=1

-XX:+UseConcMarkSweepGC

-XX:+UseParNewGC

如果加入了-Xms、-Xmx、-Xss這三個引數,下面的記憶體池初始值和最大值以及堆疊大小就不要填寫,如果沒加入這三個引數就在介面上填寫對應的引數。最後不要有空行,否則啟動引數將多出一個”exit”。

二、檢查是否生效

1.     jcmd –l


可以看出,PID為10740的程序為jcmd命令本身,PID為20488的程序為另一個正在執行的JVM。

2.     jcmd pid VM.flags


可以看出JVM啟動時的引數。

3.     jinfo –flags pid


4.  jvisualvm.exe


選中部分就是JVM的啟動引數,建議使用這個方式檢視。

三、記憶體分配和使用情況檢視

1.     記憶體模型

 

2.     jmap –heap pid



可以看出記憶體的分配情況以及引數之間的關係:

MaxNewSize=EdenSpace+From Space+To Space

NewRatio=OldSize/MaxNewSize=2

SurvivorRatio=MaxNewSize/From Space

一般FromSpace=To Space,但如果不能取整也會有較小的差異

堆的使用情況:


新生代:

EdenSpace+From Space+To Space = 256M

老生代:

        Concurrent mark-sweep generation = 768M

       我的配置中使用了CMS,所以顯示與預設的不一樣。

3. Tomcat自帶的監控頁面

 

Total memory = CMSOld Gen + ParEden Space + ParSurvivor Space

                      = 768.00 MB +85.37 MB +85.31 MB =938.68MB

從Used列能看出記憶體的各個記憶體區域的使用率。