tomcat内存溢出

最近在tomcat 上部署工程的时候,发现工程一直起不来,查看日志发现前端送给后台的数据是正常的,后天也返回了数据给前端。

并且前端返回了一个PermGen space 内存不足的错误,然后才发现是tomcat的内存空间不足。

 

tomcat 的内存泄露主要存在三种形式:

1.java.lang.OutOfMemoryError:Java heap space  ---JVM Heap(堆)溢出
虚拟机在启动时会自动设置堆得大小,初始化的值时物理内存的1/64
 
2.java.lang.OutOfMemoryError: PermGen space 
PermGen space  指内存的永久保存区域。这块内存主要是存放class 和 meta信息的,Class在被Load的时候放入到PermGen space 区域,它和存放instance的Heap区域不同,sun的GC不会再主程序运行期间对PermGen space 进行清理,所以如果你的APP会载入很多Class的话,就可能会出现PermGen space 溢出的错误。
 
3.java.lang.StackOverflowError --栈溢出
 
栈溢出表示函数调用的层数过多
 
JAVA内存JAVA_OPTS的参数设置说明
JAVA_OPTS="-server -Xms2018m -Xmx2048m -Xss521k"
-server:一定要作为第一个参数,在多个CPU时性能最佳
-Xms:初始Heap大小 使用的最小内存
-Xmx:heap 使用的最大内存
 
-XX:PermSize:设定内存的永久保存区域
-XX:MaxPermSize:设定最大内存的永久保存区域
-Xss 15120 这使得jBoss每增加一个线程就会消耗15M内存
 
 
修改时在tomcat的bin下的catalina.sh中的cygwin=false前面加入
JAVA_OPTS=''-server -Xms512m -Xmx1024m -XX:persize=512m -XX:MaxPermSize=1024m"
 
 
 
原文地址:https://www.cnblogs.com/LLeiFeng/p/4020651.html