欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Tomcat的jvm配置

程序员文章站 2022-04-04 09:56:31
Tomcat本身不能直接在计算机上运行,需要依赖于操作系统和一个JAVA虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,JAVA程序启动时JVM会分配一个初始内存和最大内存给程序。当程序需要的内存超出内存的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。 1.Tomcat异常类型 常见的 ......

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

1.tomcat异常类型

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

  1. 1.  java.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的jvm配置

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

 Tomcat的jvm配置