当前位置: 移动技术网 > IT编程>开发语言>Java > Tomcat的jvm配置

Tomcat的jvm配置

2018年11月01日  | 移动技术网IT编程  | 我要评论

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

1.tomcat异常类型

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

  1. 1.  .lang.outofmemoryerror:java heap space 堆溢出

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

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

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

  1. 2.  java.lang.outofmemoryerror:permgen space 非堆溢出

解释说明:permgen space是指内存的永久保存区域。这个区域主要存放class和meta信息,class在被loader时就会被放入permgen space。
    出错场景:常见于web服务器对jsp进行pre compile的时候, 如果你的web app下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4m)那么就会产生此错误信息了。
    解决方法:修改maxpermsize大小。建议将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以减少jar 文档重复占用内存

  1. 3.  java.lang.outofmemoryerror:unable to create new native thread.无法创建新的线程(较少见)

解释说明:这种现象比较少见,主要与jvm占用系统内存的比例有关,如果jvm占用的系统内存太大,导致创建线程所需要的物理内存有限。线程的大小是一定的,从而导致线程的数量受到限制。

解决方法:结合操作系统进行相关调整,结合不同情况对tomcat内存进行分配。

2.具体解决方法

前两种内存溢出通过设置tomcat的jvm配置进行解决。具体如下:

linux(以1g内存为例):在%tomcat安装路径%/bin/catalina.sh文件中加入如下语句:

java_opts='-server -xms800m -xmx800m -xx:permsize=128m -xx:maxpermsize=128m'

其中:“m”说明单位是mb,否则默认是kb。

设置完后,需重新启动tomcat才生效。

1  java heap(java堆)设置

-xms :xms java heap初始大小。 默认是物理内存的1/64;

-xmx :java heap最大值。不超过物理内存的80%;

-xmn :java heap最小值,一般设置为xmx的4分之一;

备注:一般的要将-xms和-xmx选项设置为相同。

      32位操作系统下jvm内存不超过2gb

2  permgen space(永久保存区域)设置

-xx:permsize:设定内存的永久保存区域;

-xx:maxpermsize:设定最大内存的永久保存区域;

    备注:-xx:maxpermsize与-xmx的总和不超过物理内存。

3  jvm其他参数:

-server/-client: 两个参数用于设置虚拟机使用何种运行模式,放在第一个

在windows上,缺省的虚拟机类型为client模式,client模式启动比较快,但运行时性能和内存管理效率不如server模式,通常用于客户端应用程序。

在linux,solaris上缺省采用server模式。server模式启动比client慢,但可获得更高的运行性能。对服务器端应用,推荐采用server模式,尤其是多个cpu的系统。

-xx:newsize 新生成的池的初始大小,缺省值为2m。

-xx:maxnewsize 新生成的池的最大大小,缺省值为32m。

-verbose:gc 现实垃圾收集信息。

-xloggc:gc.log 指定垃圾收集日志文件。

-xx:+useparnewgc 缩短minor收集的时间。

-xx:+useconcmarksweepgc 缩短major收集的时间。

-xx:userparnewgc 可用来设置并行收集(多cpu)。

-xx:parallelgcthreads 可用来增加并行度(多cpu)。

-xx:useparallelgc 设置后可以使用并行清除收集器(多cpu)。

 

 

备注:查询tomcat的jvm内存方法:

在%tomcat安装路径%/conf/tomcat-users.xml中添加如下语句:

开启tomcat后 访问port/manager/status并输入用户密码(port为自己定义的ip以及端口号)即可查看jvm参数值。

 

 

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

相关文章:

验证码:
移动技术网