JVM調優總結
堆(Heap)內存和非堆(Non-heap)內存
堆內存就是Java代碼的,留給開發人員使用;
非堆內存是留給JVM自己使用的(方法區、JVM內部處理或優化所需要的內存、每個類結構以及方法和構造方法的代碼)
Xms:JVM初始內存 默認是物理內存的1/64
Xmx:JVM最大可用內存,默認是物理內存的1/4
Xmn:設置年輕帶大小
Xss:設置每個線程的堆棧大小
默認空餘堆內存小於40%時,對內存會增大到Xmx的最大值;空餘堆內存大於70%時,會減小到Xmx的最小值。
因此,服務器一般設置Xms和Xmx相等,來避免每次GC後調整堆的大小。
XX:PermSize JVM初始分配的非堆內存,默認是物理內存的1/64
XX:MaxPermSize JVM最大非堆內存,默認是物理內存的1/4
如果Xmx設置的值過小或不設置,可能會導致java.lang.OutOfMemory
如果XX:MaxPermSize設置過小,可能會導致java.lang.OutOfMemoryError:PermGen space內存溢出
設置方法:
在tomcat/bin下有catalina.sh文件,位置在cygwin=false之前
# OS specific support. $var _must_ be set to either true or false.
cygwin=false
比如,在上面兩行之間加入如下內容
配置一:JAVA_OPTS="-Xms=3800m -Xmx=3800m -Xmn=2g -Xss=128k -XX:PermSize=1900m -XX:PermSize=3800m"
配置二:JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m"
注意:Xmx和PermSize之和不可超過不可超過JVM可以獲得的總內存
PermSize不可大於Xmx
參考文檔
http://elf8848.iteye.com/blog/467460
http://www.cnblogs.com/mingforyou/archive/2012/03/03/2378143.html