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后 访问port/manager/status并输入用户密码(port为自己定义的ip以及端口号)即可查看JVM参数值。

Tomcat的jvm配置的更多相关文章

  1. Tomcat中JVM内存溢出及合理配置及maxThreads如何配置(转)

    来源:http://www.tot.name/html/20150530/20150530102930.htm Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚 ...

  2. 配置Tomcat的JVM的大小解决Tomcat内存溢出的问题

    操作步骤如下图所示(图中也有对应的文字说明已比较详细,不再用文字做过多的解释): 1: 2: 3: 4: 5: 下面是配置的参数的说明: -Xms256m                     JV ...

  3. MyEclipse中Tomcat对应JVM的参数配置

    MyEclipse中Tomcat对应JVM的参数配置: -Xmx512M -Xms256M -XX:MaxPermSize=256m

  4. SpringBoot项目配置Tomcat和JVM参数

    设置Tomcat端口号和连接数等 使用application.properties配置文件有一些参数无法设置,所以推荐创建一个类文件来配置,如下: package com.qipai.springbe ...

  5. tomcat 的优化配置

    一.关于并发连接量的配置 在tomcat的server.xml配置文件中:将<Connector port="8080" protocol="HTTP/1.1&qu ...

  6. 转载:Tomcat的JVM设置和连接数设置

    Windows环境下修改“%TOMCAT_HOME%\bin\catalina.bat”文件,在文件开头增加如下设置:set JAVA_OPTS=-Xms256m -Xmx512m Linux环境下修 ...

  7. Tomcat(JVM)性能监控方法

    Tomcat(JVM)监控方法 1.Tomcat自带的监控页面 配置详见Tomcat安装配置监控一文,如图所示为监控页面: 2.LoadRunner编写脚本实现Tomcat监控 采用编写VuGen脚本 ...

  8. Tomcat安装、配置、优化及负载均衡详解

    一.常见JavaWeb服务器      1.WebLogic:是BEA公司的产品.WebSphereAS:是IBM公司的产品.JBossAS:红帽公司的产品,可以自行了解      2.Tomcat服 ...

  9. eclipse:Tomcat设置jvm,解决java.lang.OutOfMemoryError: Java heap space 堆内存溢出

    eclipse 有启动参数里设置jvm大小,因为eclipse运行时自己也需要jvm,所以eclipse.ini里设置的jvm大小不是具体某个程序运行时所用jvm的大小,这和具体程序运行的jvm大小无 ...

随机推荐

  1. MSP430F5529时钟系统深究

    1.为什么要进行时钟管理? 时钟系统是一个数字器件的命脉,对于普通的51单片机来说,它的时钟来源只有外部晶振,然后每12个振荡周期完成一个基本操作,所以也叫做12T单片机,但对于当前高级一点的单片机来 ...

  2. CSUOJ 1542 线段树解决括号反向问题

    题目大意: 根据初始给定的合法的小括号排序,每次进行一个操作,将第a位的括号反向,找到一个尽可能靠前的括号反向后是整个括号排列合法 数据量十分大,不断进行查询,要用线段树进行logn的复杂度的查询 首 ...

  3. [luoguP1328] 生活大爆炸版石头剪刀布(模拟)

    传送门 虽然是模拟,但是我们可以用矩阵保存结果,来是其更加简便. ——代码 #include <cstdio> #include <iostream> ][] = {{, , ...

  4. Codeforces Round #264 (Div. 2) D

    题意: 给出最多5个序列,问这几个序列的最长公共子序列的长度是多少. solution : 脑抽级别我是,第一个序列每个数字位置固定,这样只要维护一个k-1维的偏序集就好了.然后在保证每个位置合法的情 ...

  5. 【Eclipse】eclipse中设置tomcat启动时候的JVM参数

    主要通过以下的几个jvm参数来设置堆内存的: -Xmx512m 最大总堆内存,一般设置为物理内存的1/4 -Xms512m 初始总堆内存,一般将它设置的和最大堆内存一样大,这样就不需要根据当前堆使用情 ...

  6. 【重要】MySQL常见面试题

    1. 主键 超键 候选键 外键 主 键: 数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合.一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null). 超 键: 在关系中 ...

  7. 深入理解hadoop(一)

    hadoop 前世今生  hadoop最早起源于开源收缩引擎nutch,由dong cutting 贡献,但由于nutch最初的设计不能解决数10亿级别的文件存储和索引而遇到了严重的可扩展性问题,直到 ...

  8. PyMySQL - Python3 MySQL数据库连接 - 基本操作

    一.Python连接MySQL数据库   1.导入模块 #导入模块 import pymysql   2.打开数据库连接 #打开数据库连接 #注意:这里已经假定存在数据库testdb,db指定了连接的 ...

  9. 【CV论文阅读】生成式对抗网络GAN

    生成式对抗网络GAN 1.  基本GAN 在论文<Generative Adversarial Nets>提出的GAN是最原始的框架,可以看成极大极小博弈的过程,因此称为“对抗网络”.一般 ...

  10. javaWeb_使用标签库简化jsp

    jsp标签库.也叫自己定义标签. 应用范围 jsp标签.主要应用于前台页面.在jsp中.假设jsp中存在<% %> 等 java代码.那么对前台开发者来说.就须要了解 java代码. 怎样 ...