文档章节

tomcat内存溢出与调优

LuXing
 LuXing
发布于 2015/07/28 13:49
字数 876
阅读 23
收藏 0

转载自http://www.cnblogs.com/china-li/archive/2012/12/12/2803341.html


存溢出常见的两种:java.lang.OutOfMemoryError: PermGen space

          java.lang.OutOfMemoryError: Java heap space

PermGen space指的是内存的永久保存区域。这块内存主要是被JVM存放Class和Meta信息的,如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。可以通过修改PermSize来修改。

Java heap space指的是Heap size的设置太小造成的。Heap size是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。所以我们可以把-Xms和-Xmx的值设置大一点,就不会报错了。

提示:在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。

提示:Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。比如我们的内存是1G,则-Xms和-Xmx的值可以设置为800m。

 

需要注意的是,如果是32位系统,所能使用的内存最大为2G。就算电脑内存是4G,也是一样。64位则没有这个限制。

 

下面分析Tomcat使用虚拟目录和不使用虚拟目录的的修改方式(虚拟目录理解起来比较抽象,如果没有用过的人,可能对此比较陌生。简单来说,如果用eclipse自带的Servers,在Servers里面配置了Tomcat服务器,这种方式是原始的,是不涉及虚拟目录的。如果你用了eclipse的Tomcat插件,我们需要在tomcat/cong/catalina/localhost下创建一个xml文件,文件中配置的就是虚拟目录):

1、不使用虚拟目录的时候

  eclipse--Run--Run Configurations--左侧选择Apache Tomcat--右侧第二个"=Arguments"--在VM arguments的最前面加入参数:-server -Xms800m -Xmx800m -XX:MaxPermSize=256M即可。

  也可以通过修改tomcat/bin/catalina.bat(Window环境),tomcat/bin/catalina.sh(Linux环境)文件来达到目的。

  Window环境下,catalina.bat文件前面加上:

JAVA_OPTS="-server -Xms1200m -Xmx1200m -XX:MaxPermSize=256m -Djava.awt.headless=true"

最后一个参数-Djava.awt.headless=true和图形处理有关,可有可无。必须的参数是:Xms Xmx PermSize

  

  Linux环境下,catalina.sh文件前面加上:

JAVA_OPTS="="-server -Xms1024m -Xmx1024m -XX:MaxPermSize=256m -Djava.awt.headless=true"

 

2、使用虚拟目录的时候

  使用虚拟目录的时候,要在eclipse中配置。

  Window--Preferences--Tomcat--JVM Settings--Append to JVM Parameters下添加三条:

-Xms800m 
-Xmx800m 
-XX:PermSize=128M

  Xms:jvm初始化堆大小

  Xmx:jvm最大堆大小(一般xms和xmx设置一样,但不得超过系统内存80%)

  Xmn:设置年轻代大小为2G。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

  Xss:设置每个线程的堆栈大小。

  XX:PermSize:非堆区大小

  XX:MaxPermSize:最大非堆区大小


© 著作权归作者所有

共有 人打赏支持
上一篇: 随机数
下一篇: Maven 坑
LuXing
粉丝 19
博文 84
码字总数 54768
作品 0
广州
程序员
私信 提问
JVM调优之Tomcat启动参数配置及详解(一)

开发项目中会遇到Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)的问题,通过查找资料找到是通过设置Tomcat 启动堆空间大小、年轻代大小、每个线程大小参数进行调优的,具体如下...

程序猿付显
2016/04/16
2.5K
2
60扩展:tomcat虚拟主机

1、有时候tomcat虚拟主机在在自建目录文件docBase里,重启无法启动的: 注释:Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就...

芬野de博客
2018/09/01
0
0
深入浅出“JVM”性能优化

深入浅出“JVM”性能优化 理解性能优化 性能基准 性能优化到底是什么 衡量维度 JVM调优 知其然,知其所以然 详解什么是JVM运行时数据区 详解什么是JVM内存模型JMM 详解GC可达 详解各垃圾回收...

Java高级架构
2017/12/18
0
0
netstat监控大量ESTABLISHED连接与Time_Wait连接问题

问题描述: 在不考虑系统负载、CPU、内存等情况下,netstat监控大量ESTABLISHED连接与Time_Wait连接。 # netstat -n | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}'CLOSE_WAIT......

cosco
2016/09/18
18
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

没有更多内容

加载失败,请刷新页面

加载更多

创建多个git账号

实习开发中我们可能一个机子上配置多个git账号,如github.com,oschina.com 或者工作账号,私人账号,这时候就2个账号用一个key,肯定会冲突,有一个会提示没权限(账号和密码对应不上) ssh ...

echojson
28分钟前
1
0
rabbitmq安装教程

RabbitMQ有Windows与Linux版本的,这里先写Windows版本的安装。 以前安装软件总是在百度上找某某安装教程,结果能按照教程安装好的软件真的不多。想起先前以为大牛说的一句话,去官网按照官网...

em_aaron
今天
7
0
Android 贝塞尔曲线实践——波浪式运动

一、波浪效果如下 贝塞尔曲线自定义波浪效果的案例很多,同样方法也很简单,大多数和本案例一样使用二次贝塞尔曲线实现,同样还有一种是PathMeasure的方式,这里我们后续补充,先来看贝塞尔曲...

IamOkay
今天
3
0
Nmap之防火墙/IDS逃逸

选项 解释 -f 报文分段 --mtu 指定偏移大小 -D IP欺骗 -sI 原地址欺骗 --source-port 源端口欺骗 --data-length 指定发包长度 --randomize-hosts 目标主机随机排序 --spoof-mac Mac地址欺骗 ...

Frost729
今天
2
0
带你搭一个SpringBoot+SpringData JPA的环境

不知道大家对SpringBoot和Spring Data JPA了解多少,如果你已经学过Spring和Hibernate的话,那么SpringBoot和SpringData JPA可以分分钟上手的。 其实我在学完SpringBoot和SpringData JPA了之...

java菜分享
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部