当前位置: 移动技术网 > 网络运营>服务器>Linux > linux解决Tomcat内存溢出的问题

linux解决Tomcat内存溢出的问题

2019年04月26日  | 移动技术网网络运营  | 我要评论

tomcat本身不能直接在计算机上运行,需要依赖于操作系统和一个java虚拟机。java程序启动时jvm会分配一个初始内存和最大内存给程序。当程序需要的内存超出内存的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。

一、常见的java内存溢出有以下三种:

1. java.lang.outofmemoryerror: java heap space 即jvm heap溢出

解释说明:jvm在启动的时候会自动设置jvm heap的值,jvm堆的设置是指java程序运行过程中jvm可以调配使用的内存空间的设置。其初始空间默认是物理内存的1/64,最大空间不可超过物理内存。jvm提供-xmn -xms -xmx等选项来进行设置。

出错场景:在jvm中,如果98%的时间是用于gc,且可用的heap size不足2%时,将会出现jvm heap溢出

解决方法:修改jvm heap的大小。

2. java.lang.outofmemoryerror: permgen space 即permgen space溢出

解释说明:permgen space是指内存的永久保存区域。这个区域主要存放class和meta信息,class在被load时就会被放入permgen space。

出错场景:如果app载入很多class,就可能会出现permgen space溢出。(因为sun的gc不会在程序运行时对permgen space进行清理)常见于web服务器对jsp进行pre compile的时候

解决方法:修改maxpermsize大小

3. java.lang.stackoverflowerror 即栈溢出

解释说明:jvm采用的是栈式的虚拟机,函数的调用过程都体现在堆栈和退栈上。

出错场景:通常栈的大小是1-2mb的,如果调用构造函数的 “层”太多,则会出现栈溢出

解决方法:修改程序

二、tomcat的jvm内存溢出解决方法

在生产环境中,tomcat内存设置不好很容易出现jvm内存溢,解决方法就是修改tomcat中的catalina.sh文件。
在catalina.sh文件中,找到cygwin=false,在这一行的前面加入参数,具体如下

# vi tomcat_home/bin/catalina.sh
java_opts="-server -xms800m -xmx800m -xx:permsize=256m -xx:maxpermsize=512m -xx:maxnewsize=512m"

其他说明:

1.“m”说明单位是mb,否则默认是kb
2.一般使用物理内存的80%作为堆大小
3.一般把-xms和-xmx设为一样大
4.一般把-xmn设置为-xmx值的1/4
5.一般将堆的总大小的50%到60%分配给新生成的池

三、jvm参数说明:

-server 一定要作为第一个参数,启用jdk的server版本,在多个cpu时性能佳
-xms java heap初始大小。 默认是物理内存的1/64。
-xmx java heap最大值。建议均设为物理内存的80%。不可超过物理内存。
-xmn java heap最小值,一般设置为xmx的3、4分之一。
-xx:permsize 设定内存的永久保存区初始大小,缺省值为64m。
-xx:maxpermsize 设定内存的永久保存区最大大小,缺省值为64m。
-xx:survivorratio=2 生还者池的大小,默认是2。如
-xx:newsize 新生成的池的初始大小。 缺省值为2m。
-xx:maxnewsize 新生成的池的最大大小。 缺省值为32m。
+xx:aggressiveheap 让jvm忽略xmx参数,疯狂地吃完一个g物理内存,再吃尽一个g的swap。
-xss 每个线程的stack大小
-verbose:gc 现实垃圾收集信息
-xloggc:gc.log 指定垃圾收集日志文件
-xx:+useparnewgc 缩短minor收集的时间
-xx:+useconcmarksweepgc 缩短major收集的时间
-xx:userparnewgc 可用来设置并行收集(多cpu)
-xx:parallelgcthreads 可用来增加并行度(多cpu)
-xx:useparallelgc 设置后可以使用并行清除收集器(多cpu)

以上这篇linux解决tomcat内存溢出的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网