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

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大小

  1. 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时性能佳 -Xmsjava Heap初始大小。 默认是物理内存的1/64。 -Xmxjava heap最大值。建议均设为物理内存的80%。不可超过物理内存。 -Xmnjava 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:表示对非堆区分配的内存的最大上限。配置这两个启动参数试试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值