Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >tomcat OutOfMemoryError

tomcat OutOfMemoryError

作者头像
阳光岛主
发布于 2019-02-19 02:30:41
发布于 2019-02-19 02:30:41
1.2K0
举报
文章被收录于专栏:米扑专栏米扑专栏

部署应用服务到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及其解决方法

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013年10月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
tomcat 性能调优
1.----------------------Linux下修改TomcatJVM内存大小---------------------- 要添加在tomcat  的bin 下catalina.sh 里,位置cygwin=false前 。注意引号要带上,红色的为新添加的. # OS specific support.  $var _must_ be set to either true or false. JAVA_OPTS="-Xms256m -Xmx512m -Xss1024K -XX:PermSize=1
Java学习123
2018/05/16
9600
Tomcat报错—Tomcat内存溢出及大小调整
本文记录一些常见的Tomcat经常出现的内存溢出问题,在查询大量数据和加载jar包出现异常。一般JVM内存溢出(OOM),分为堆内存溢出和PermGen区内存溢出:
全栈程序员站长
2022/07/19
2.7K0
tomcat内存溢出问题记录
问题说明: 公司内网环境中部署的jenkins代码发版平台突然不能访问了,查看tomcat的catalina.out日志发现报错如下: [root@redmine logs]# tail -f /srv/apache-tomcat-7.0.67/logs/catalina.out ...... Exception in thread "http-bio-8080-exec-5" java.lang.OutOfMemoryError: PermGen space Exception in thread "ht
洗尽了浮华
2018/01/23
1.6K0
管理-Linux下Tomcat常用服务管理方式
5. 如果你想直接干掉Tomcat,你可以使用kill命令,直接杀死Tomcat进程
秋日芒草
2022/01/12
7640
学习笔记0530----Tomcat扩展
分别复制tomcat目录下的 conf logs temp webapps work 这5个目录到 test1 和 test2下。
嘻哈记
2020/11/24
6530
Linux下如何查看tomcat是否安装、启动、文件路径、进程ID
在Linux系统下,Tomcat使用命令的操作! 检测是否有安装了Tomcat: rpm -qa|grep tomcat 查看Tomcat的进程ID: ps -ef|grep tomcat 查看Tomcat目录: find / -name tomcat 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.sh 查看Tomcat是否以关闭 ps -ef|grep java 如果显示以下相似信息,说明Tomcat还没
星哥玩云
2022/07/26
13.6K0
Linux下如何查看tomcat是否安装、启动、文件路径、进程ID
分享一例脚本发版和tomcat重启脚本
线上有个网站业务部署在tomcat上,由于频繁上线修改,需要经常启动tomcat。 tomcat服务自带的bin下没有重启脚本,下面分享一例脚本发版和tomcat重启脚本: 1)现将业务代码从svn里下载到本地,首次下载后,后续就使用svn update更新代码即可。 发版脚本: [root@redmine ~]# cd /Data/webroot_svncode/xqsj_app/banshanbandao/bsbd_war/ [root@redmine bsbd_war]# ls ROOT.war
洗尽了浮华
2018/01/23
6240
Tomcat 日志切割
1 安装cronolog 1[root@app_51 ~]$ yum install -y cronolog 2[root@app_51 ~]$ which cronolog 3/usr/sbin/cronolog 2 修改tomcat的catalina.sh 1 [ghl@app_51 ~]$ cd /home/ghl/tomcat/apache-tomcat-8.5.37/bin/ 2 [ghl@app_51 bin]$ cp catalina.sh catalina.sh.bak 3 #需要将第
HaydenGuo
2019/12/13
1.1K0
Tomcat 日志切割
皕杰报表之关于tomcat启动问题
更改 web项目WEB-INF\resources下的Congfig.xml里的 <characterEncode>UTF-8</characterEncode> 更改jsp中编码格式为utf-8
用户10133222
2022/11/03
2630
部署云服务器--(3) Linux系统用脚本方式实现Tomcat的开机自启动
此篇教程在我的电脑(deepin-generic)上是可以用的,做好脚本后重启立即生效,但是在服务器(CentOS-7.3),需要开机后等待十几分钟,原因不明啊,很迷,另外记得服务器的防火墙开了8080端口(或者你设置的tomcat的端口).
浩Coding
2019/07/02
1.6K0
部署云服务器--(3) Linux系统用脚本方式实现Tomcat的开机自启动
GeoServer发布地图服务
最近要利用GIS服务器软件发布一些地图服务,商业的软件(比如ArcGIS Server肯定是用不起的),最后在开源GIS软件GeoServer和MapServer中选择了GeoServer。 下面简单说说如果使用,给初始GeoServer的朋友一点点帮助!愿他们不走我走过的弯路,哈哈!
卡尔曼和玻尔兹曼谁曼
2019/01/22
3.6K0
GeoServer发布地图服务
tomcat 9.0.4 性能调优
参考了网上的一些优化参数,但是在启动中发现 有2个报错: 11-Feb-2018 15:57:23.293 警告 [main] org.apache.catalina.startup.SetAllPropertiesRule.begin [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'maxSpareThreads' to '200' did not find a matching property. 11-Feb-2
拓荒者
2019/03/15
5240
Tomcat内存设置详解
1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出 JVM在启动的时候会自动设置JVM Heap的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)不可超过物理内存。
allsmallpig
2021/02/25
4.5K0
Tomcat的三种模式及并发优化
Tomcat的运行模式有3种 1、bio 默认的模式,性能非常低下,没有经过任何优化处理和支持. 2、nio 利用java的异步io护理技术,noblocking IO技术. 想运行在该模式下,直接修改server.xml里的Connector节点,修改protocol为 1 2 3 4 5 6 7 <Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="2
小小科
2018/05/04
7340
OutOfMemory及其解决方法「建议收藏」
1、java.lang.OutOfMemoryError: PermGen space
全栈程序员站长
2022/07/25
10.9K0
CentOS下替换原有的OpenJDK并安装Tomcat
[root@kakaka usr]# Java -version java version "1.6.0_38" Java(TM) SE Runtime Environment (build 1.6.0_38-b05) Java HotSpot(TM) Server VM (build 20.13-b02, mixed mode)
星哥玩云
2022/07/03
4840
centos下tomcat安装调试
1、在Linux系统下,重启Tomcat使用命令操作的! ** 方法一:** 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 .
Albert陈凯
2018/04/04
1.3K0
tomcat内存配置
1Tomcat的JVM内存溢出解决方法 在生产环境中,tomcat内存设置不好很容易出现JVM内存溢,解决方法就是修改Tomcat中的catalina.sh文件。
用户1499526
2019/07/15
6.9K0
Xms Xmx PermSize MaxPermSize 区别
1.参数的含义 -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M -vmargs 说明后面是VM的参数,所以后面的其实都是JVM的参数了 -Xms128m JVM初始分配的堆内存 -Xmx512m JVM最大允许分配的堆内存,按需分配 -XX:PermSize=64M JVM初始分配的非堆内存 -XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配
流柯
2018/08/30
4K0
jps查看java进程(进程的等待状态)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/129257.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/29
1.8K0
相关推荐
tomcat 性能调优
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档