文档章节

linux/centos 解决Tomcat内存溢出,centostomcat

 空灵飞渡
发布于 2016/08/11 09:26
字数 1469
阅读 39
收藏 0

linux/centos 解决Tomcat内存溢出,centostomcat


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


一、常见的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) 

TOMCAT 内存溢出错误

先试试这个:
-Xms64m 
-Xmx256m 
-XX:PermSize=128M 
-XX:MaxNewSize=256m 
-XX:MaxPermSize=256m 

下面是找了2篇文章

答案1
设置Tomcat启动的初始内存
其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可
进行设置
三、实例,以下给出1G内存环境下java jvm 的参数设置参考:
JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "
JAVA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX: 
NewSize=192m -XX:MaxNewSize=384m"
CATALINA_OPTS="-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m 
-XX:NewSize=192m -XX:MaxNewSize=384m"
Linux:
在/usr/local/apache-tomcat-5.5.23/bin 目录下的catalina.sh
添加:JAVA_OPTS='-Xms512m -Xmx1024m'
要加“m”说明是MB,否则就是KB了,在启动tomcat时会 报内存不足。
-Xms:初始值
-Xmx:最大值
-Xmn:最小值
Windows
在catalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m 
如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.
但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,
就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就OOM了..
windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.
解决办法:
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs
加入 -Xms300m -Xmx350m 
重起tomcat服务,设置生效 

答案2
Tomcat 的JVM 内存溢出问题的解决
关键字: tomcat 的jvm 内存溢出问题的解......余下全文>>
 

tomcat提示内存溢出,怎解决

Perm区溢出了,可能是你的SSH包加了之后默认启动加载的东西多了导致的。
java虚拟机对非堆区内存配置的两个参数:
1、-XX:PermSize:表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存)
2、-XX:MaxPermSize:表示对非堆区分配的内存的最大上限。

配置这两个启动参数试试

本文转载自:http://www.bkjia.com/xtzh/892008.html

共有 人打赏支持
粉丝 3
博文 177
码字总数 81659
作品 0
广州
Tomcat内存溢出快速解决办法

cd /opt/apache-tomcat-6.0.29(这是你linux上存放tomcat的路径) 这中间你要去查看日志到底是tomcat是什么问题,定位到那个tomcat的问题。 cd /bin 使用Tomcat关闭命令(一般在运行的项目这...

Villain丶Cc
05/27
0
0
linux/centos解决Tomcat内存溢出

Tomcat本身不能直接在计算机上运行,需要依赖于操作系统和一个JAVA虚拟机。JAVA程序启动时JVM会分配一个初始内存和最大内存给APP。当APP需要的内存超出内存的最大值时虚拟机就会提示内存溢出...

宛珩
2016/02/16
233
0
解决Tomcat无法shutdown进程

问题分析 这个在windows下没有碰到过,因为此前跑Tomcat都是以服务而不是命令脚本的形式跑的,而且已经换了一个项目,所以暂时不考察windows下是否存在该问题。 难道是Tomcat版本问题?或者用...

Jesons
2015/04/22
0
3
Java内存溢出详解+Tomcat配置文件中JVM的启动参数设置

一、常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出 JVM在启动的时候会自动设置JVM Heap的值,其初始空间(即-Xms)是物理内存的1/6...

nearzk-osc
2015/07/30
0
0
Tomcat6.0.41 (64位) Windows与Linux下内存调优

一、常见的Java内存溢出有以下三种 1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出 JVM在启动的时候会自动设置JVM Heap的值,其初始空间(即-Xms)是物理内存的1/64,...

HostSugar
2014/12/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0
20180818 上课截图

小丑鱼00
今天
1
0
Springsecurity之SecurityContextHolderStrategy

注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.x 先上一张图: 图1 SecurityContextHolderStrategy的三个......

汉斯-冯-拉特
今天
1
0
LNMP架构(Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl)

Nginx负载均衡 网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时...

蛋黄_Yolks
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部