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