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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
第十五章·Linux系统管理-进程管理
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
1.1K0
第十五章·Linux系统管理-进程管理
​Linux CPU 性能优化指南
本文作者:allenxguo,腾讯 QQ 音乐后台开发工程师 本文主要帮助理解 CPU 相关的性能指标,常见的 CPU 性能问题以及解决方案梳理。 系统平均负载 简介 系统平均负载:是处于可运行或不可中断状态的平均进程数。 可运行进程:使用 CPU 或等待使用 CPU 的进程 不可中断状态进程:正在等待某些 IO 访问,一般是和硬件交互,不可被打断(不可被打断的原因是为了保护系统数据一致,防止数据读取错误) 查看系统平均负载 首先top命令查看进程运行状态,如下: PID USER
腾讯技术工程官方号
2020/08/11
8.6K0
Linux高负载排查最佳实践
在Linux系统中,经常会因为负载过高导致各种性能问题。那么如何进行排查,其实是有迹可循,而且模式固定。
十里桃花舞丶
2024/03/15
5210
Linux高负载排查最佳实践
系统的load average
可运行状态进程:可以理解为系统内正在占用CPU或正在等待CPU的进程,也就是处于R状态的进程
程哲
2021/12/10
5850
从平均负载开始,这进程是 CPU Bound 还是 IO Bound 的?
在排查性能问题的时候,我们经常会使用 top 或者 uptime 两个 Linux 命令,top 命令和 uptime 命令都会给出最近机器 1 min,5 min,15 min 的平均负载情况,一般平均负载值(Average Load)接近甚至超出 CPU cores (现在一般指 processors 的个数, 现在 CPU 的一个 core 一般有两个 processor, 可以处理两个进程) 时,系统会有性能瓶颈.
Cloud-Cloudys
2023/10/21
2940
从平均负载开始,这进程是 CPU Bound 还是 IO Bound 的?
Linux性能优化
性能问题的本质就是系统资源已经到达瓶颈,但请求的处理还不够快,无法支撑更多的请求。 性能分析实际上就是找出应用或系统的瓶颈,设法去避免或缓解它们。
mikelLam
2022/10/31
2.8K0
Linux性能优化
一秒内诊断 Linux 服务器的性能
60,000 毫秒内对 Linux 的性能诊断 当你为了解决一个性能问题登录到一台 Linux 服务器:在第一分钟你应该检查些什么? 在 Netflix,我们有一个巨大的 EC2 Linux 云,以及大量的性能分析工具来监控和诊断其性能。其中包括用于云监控的 Atlas,以及用于按需实例分析的 Vector。虽然这些工具可以帮助我们解决大多数问题,但我们有时仍需要登录到一个服务器实例,并运行一些标准 Linux 性能工具。 在这篇文章中,Netflix Performance Engineering 团
小小科
2018/05/04
1.5K0
一秒内诊断 Linux 服务器的性能
从入门到转型之Linux性能优化实践学习指南
本系列是从入门到转型之Linux性能优化实践学习指南,是博主学习Linux性能优化之路的精华版本,我将分享大量性能优化的思路和方法,并进行相应工具使用介绍和总结。
全栈工程师修炼指南
2022/09/29
6070
从入门到转型之Linux性能优化实践学习指南
LINUX下查看CPU使用率的命令
今天就来好好学习下Linux下如何查看CUP的使用率: 监控CPU的性能一般包括以下3点:运行队列、CPU使用率和上下文切换。 对于每一个CPU来说运行队列最好不要超过3,例如,如果是双核CPU就不要超过6。如果队列长期保持在3以上,说明任何一个进程运行时都不能马上得到cpu的响应,这时可能需要考虑升级cpu。另外满负荷运行cpu的使用率最好是user空间保持在65%~70%,system空间保持在30%,空闲保持在0%~5% 。
软测小生
2019/07/05
50.2K0
LINUX下查看CPU使用率的命令
如何理解系统平均负载值(一)
每当我们发现系统变慢时,通常做的第一件事,就是执行top或者uptime命令,来了解系统的负载情况。比如下面这样,我在命令行里输入了uptime命令,系统也随即给出了结果。
全栈程序员站长
2022/09/06
8890
五分钟带你掌握Linux系统查看CPU使用率、内存使用率、磁盘使用率
%us:表示用户空间程序的cpu使用率(没有通过nice调度) %sy:表示系统空间的cpu使用率,主要是内核程序。 %ni:表示用户空间且通过nice调度过的程序的cpu使用率。 %id:空闲cpu %wa:cpu运行时在等待io的时间 %hi:cpu处理硬中断的数量 %si:cpu处理软中断的数量 %st:被虚拟机偷走的cpu 注:99.0 id,表示空闲CPU,即CPU未使用率,100%-99.0%=1%,即系统的cpu使用率为1%。
不吃小白菜
2021/03/02
19.5K0
【科研利器】进程管理
中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来影响设备的请求
自学气象人
2022/11/14
9430
【科研利器】进程管理
关于linux中的CPU上下文切换
目录 1.什么是CPU上下文切换 2.CPU上下文切换的类型 3.如何查看系统中的上下文切换 4.案例 5.总结 ---- 读过倪朋飞的《Linux性能优化实战》经常说的 CPU 上下文切换是什么意思
冬天里的懒猫
2021/08/05
1.2K0
相关推荐
第十五章·Linux系统管理-进程管理
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档