专栏首页米扑专栏tomcat OutOfMemoryError

tomcat OutOfMemoryError

部署应用服务到tomcat下,可能会抛出内存溢出异常,如下:

Exception in thread "Timer-1" java.lang.OutOfMemoryError: PermGen space

为了解决tomcat在大进行大并发请求时,出现内存溢出的问题,请修改tomcat的内存大小,其中分为以下两种方式:

一、使用 catalina.bat 等命令行方式运行的 tomcat

1、windows环境下,修改 tomcat\bin\Catalina.bat 文件

在166行左右 rem Execute Java with the applicable properties ”以下每行 %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

在 %DEBUG_OPTS% 后面添加-Xms256m -Xmx512m

2、linux环境下,打开在Tomcat的安装目录的bin文件的 ./bin/catalina.sh 文件,进入编辑状态.

在注释后面加上如下脚本: JAVA_OPTS='-Xms512m -Xmx1024m' JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=64M -XX:MaxPermSize=256m" 或者,在echo "Using CATALINA_BASE:   $CATALINA_BASE" 下添加一行

  echo "Using CATALINA_BASE:   $CATALINA_BASE"   JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m"   echo "Using CATALINA_HOME:   $CATALINA_HOME"   echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR" 说明: JAVA_OPTS='-Xms512m -Xmx1024m' 是设置Tomcat使用的内存的大小; -XX:PermSize=64M -XX:MaxPermSize=256m 指定类空间(用于加载类)的内存大小 

保存后,重新以命令行的方式运行 tomcat ,即可,然后通过最后面介绍的如何观察tomcat现有内存情况的方法进行查看是否已经变更成功。

二、使用 系统中的 “服务”,或者开始菜单的可执行程序运行的tomcat

1、关闭 现在正在运行的tomcat

如果是tomcat 5.5 或者是 5.0.28 之后的版本,在 Java 选项卡中,下方,会有 Inital memory Pool:    Maximum memory Pool: Thread stack size:

三个输入框,在这里即可不用做上面的操作,直接配置内存大小,只需要设置 Inital memory Pool 为 128 Maximum memory Pool 为 256

点击确定后,重启tomcat 生效

如果您是低版本的tomcat,发现没有上面那几个录入框,请看下面的操作步骤

在开始菜单中,找到“Apache Tomcat 5.0”,并选择“Configure Tomcat”,在弹出的对话框窗口中,切换到 Java VM 选项卡,并在 Java Options 输入框的最前面输入

-Xms256m -Xmx512m

即输入框中的内容会像下面的代码(与自己的环境有所区别)

-Xms256m -Xmx512m -Dcatalina.home="C:\tomcat5" -Djava.endorsed.dirs="C:\tomcat5\common\endorsed" -Xrs

设置完后,点击“确定”,并重启tomcat即可。

三、查看现有tomcat的内存大小情况

1、linux下,直接查看 ps aux | grep tomcat

2、添加用户,修改 conf/tomcat-users.xml

<?xml version='1.0' encoding='utf-8'?> <tomcat-users>   <role rolename="tomcat"/>   <role rolename="role1"/>   <role rolename="manager"/>   <role rolename="admin"/>   <user username="tomcat" password="tomcat" roles="tomcat"/>   <user username="both" password="tomcat" roles="tomcat,role1"/>   <user username="role1" password="tomcat" roles="role1"/>   <user username="admin" password="admin" roles="admin,manager"/>

  <role rolename="manager-gui"/>   <user username="tomcat" password="s3cret" roles="manager-gui"/> </tomcat-users>

3、重启tomcat,使新增用户生效,再登录进入了Server Status页面,可以在JVM表格中看到,如下图 Free memory: 333.96 MB Total memory: 498.00 MB Max memory: 1326.25 MB

上面的文字即代表了,当前空闲内存(Free memory)、当前总内存(Total memory)、最大可使用内存(Max memory)三个数据。 确定了最大内存足够大时,tomcat即可正常运转

公司的一个服务器使用Tomcat6默认配置,在后台一阵全点击服务器就报废了,查了一下就要是PERMSIZE默认值过小造成(16-64)

TOMCAT_HOME/bin/catalina.sh

添加一行:JAVA_OPTS=" -server -XX:PermSize=64M -XX:MaxPermSize=128m"

问题解决(可能为调用JAR包过多原因)下面是网上看到一些设置

JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

当在对其进行并发测试时,基本上30个USER上去就当机了,还要修改默认连接数设置:以下红色四行TOMCAT6中好相没有,手工加上就可以了,基本上可以解决连接数过大引起的死机。具体数值可跟据实际情况设置

    <Connector port="80" protocol="HTTP/1.1"                 maxThreads="600"       minSpareThreads="100" maxSpareThreads="500" acceptCount="700" connectionTimeout="20000"  redirectPort="8443" />

这样设置以后,基本上没有再当机过。。。。。

              maxThreads="600"       ///最大线程数 minSpareThreads="100"///初始化时创建的线程数 maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要 的socket线程。

acceptCount="700"//指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

参考推荐:

修改和查看tomcat内存大小

PermGen space错误解决方法

PermSize内存设置方法(tomcat)

tomcat的OutOfMemoryError(PermGen space)解决方法

Tomcat java.lang.OutOfMemoryError: PermGen space及其解决方法

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Ubuntu12.04创建 eclipse launcher

    Ubuntu 12.04 默认无法launcher Eclipse快捷图标到左侧Dash,需要手工配置,步骤如下:

    阳光岛主
  • JavaScript学习笔记(O)——浏览器内核介绍

    浏览器最重要或者说核心的部分是“Rendering Engine”,可大概译为“解释引擎”,不过我们一般习惯将之称为“浏览器内核”。负责对网页语法的解释(如HT...

    阳光岛主
  • mediawiki 常用参数设置

    在编写wiki文档的过程中,遇到了很多自定义的需求,通过学习和实践,先总结一些mediawiki 的常用参数设置。

    阳光岛主
  • 安装配置Tomcat

    似水的流年
  • 安装配置Tomcat

    传送门:http://pan.baidu.com/s/1i5GzrjZ 密码: s4ye 下载tomcat,解压到你想要的目录下 配置tomcat环境...

    似水的流年
  • 安装配置Tomcat

    传送门:http://pan.baidu.com/s/1i5GzrjZ 密码: s4ye 下载tomcat,解压到你想要的目录下 配置tomcat环境变量:  ...

    似水的流年
  • Invalid character found in the request target. The valid characters are defined in RFC 7230 and RF

    原因是升级后的tomcat设置了url参数解析规则,限制非法字符,如  |  ,解决办法是:

    尚浩宇
  • Linux(CentOS7.2)下安装JDK及Tomcat

    JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21331...

    耕耘实录
  • Web基础配置篇(三): tomcat的配置及使用

    tomcat,大家应该都知道是啥,servlet的Web容器而已,遵守servlet规范的JavaEE服务器。我们通常用tomcat来部署war包来做应用服务器...

    品茗IT
  • Web基础配置篇(三): tomcat的配置及使用

    tomcat,大家应该都知道是啥,servlet的Web容器而已,遵守servlet规范的JavaEE服务器。我们通常用tomcat来部署war包来做应用服务器...

    品茗IT

扫码关注云+社区

领取腾讯云代金券