JVM内存大小 = 堆内存 + 非堆内存
-Xms 设置最小堆内存
-Xmx 设置最大堆内存
一般建议-Xms 和 -Xmx设置相同,以避免每次垃圾回收完成后JVM重新分配内存.
-XX:PermSize 设置最小非堆内存,
-XX:MaxPermSize 设置最大非堆内存
如果是windows系统,修改catalina.bat后,用catalina.bat启动会生效,但是通过windows服务启动不会生效,需要进注册表修改
具体位置:
网上给出的位置是:HKEY_LOCAL_MACHINE/SOFTWARE/Apache Software Foundation/Tomcat Service Manager/Tomcat5/Parameters/Java/Options
但我本地的位置是:HKEY_LOCAL_MACHINE/SOFTWARE/Apache Software Foundation/Procrun 2.0/Tomcat5/Parameters/Java/Options
1.java.lang.OutOfMemoryError: unable to create new native thread
建议增加-Xss128k参数
-Xss128k: 设置每个线程的堆栈大小.JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.根据应用的线程所需内存大小进行调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右.
2.java.lang.OutOfMemoryError: PermGen space
原因可能是-XX:MaxPermSize 值小了。有可能是在
catalina.bat
中加了-XX:MaxPermSize=256m没有生效。
所以建议参数设置为:-Xms1024m -Xmx1024m -Xss128k -XX:MaxPermSize=256m
如果是windows服务启动,需要加在注册表中才能生效。