JBoss 4.0.5GA 多次部署应用程序出现 PermGen 内存不足(溢出)问题

本文主要是介绍JBoss 4.0.5GA 多次部署应用程序出现 PermGen 内存不足(溢出)问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一. 问题描述

JBoss 4.0.5GA 在若干次部署或重新部署应用程序(war、ear 等)后会马上出现 PermGen Memory Leak : Out of memory exception 内存溢出异常。

参阅:http://wiki.jboss.org/wiki/Wiki.jsp?page=OutOfMemoryExceptionWhenRedeploying

二. 问题分析

1. 猜测:应用程序的类中包括了 static 成员定义,当重新部署时 JBoss 使用新的 Class Loader 载入应用程序的所有类。由于 static 成员是置于 JBoss 的固定内存单元,多次部署后占用内存空间以倍数递增,最终使该部分内存满载,进而在下一次部署或重新部署时导致内存溢出异常。

参阅:http://jboss.org/index.html?module=bb&op=viewtopic&p=3918780

讨论标题:Multiple redeployment gets PermGen error

The permanent generation holds class-level data (that is, any fields defined as static). My guess that your classes contain static data, and when you redeploy, the redeployed classes are loaded by a new class loader and thus the static data from the old classes and the new classes are now taking up room. Do this several times and the permanent generation will fill up. If my guess is correct, the solution would be to modify your code to not use static data in any of your classes. Of course you should also check any class libraries on which your code depends (jar files you package with your ear) for the same thing. But then I could be wrong.

2. 在 Bug 2299 报告的讨论中,涉及到关于 Struts 框架中引用了 BeanUtils 1.6 的讨论。

三. 参阅

1. 相关 Bug 报告:

1)Bug 1319

http://jira.jboss.com/jira/browse/JBAS-1319
(声称到 4.0.3RC1 已解决)

2)Bug 2299

http://jira.jboss.com/jira/browse/JBAS-2299
(声称到 4.2.0 才会解决)

2. 关于 Permanent Generation Heap 的概念以及如何在 JVM 启动命令行中添加重新定义 PermSize 和 MaxPermSize 的参数:

http://wiki.jboss.org/wiki/Wiki.jsp?page=PermanentGeneration

3. 关于如何查看 JBoss 内存使用状况的操作指引:

http://wiki.jboss.org/wiki/Wiki.jsp?page=HowCanIDisplayTheMemoryPoolUsage

1)打开 http://server-name-or-ip/jmx-console/HtmlAdaptor
2)在 jboss.system 节点找到 type=ServerInfo ,点击进入
3)找到 java.lang.String listMemoryPools() 方法,点击 Invoke 按钮执行

PermGen 内存状况在最下面一行,当已使用的内存数量逼近最大可用内存限制时应考虑重启 JBoss 。

四. 建议

在可能的条件下使用更稳定但不是免费的 IBM Websphere Application Server 代替 JBoss Application Server 。根据外间性能评测,这两者在性能上比较接近。

性能评测参阅: http://www.51testing.com/html/27/1132.html

但如果应用程序是在正式运营期间,由于可能的重新部署情况比开发和测试阶段少很多,因此不需过多担心。 使用以下方案可减少或避免内存溢出异常的出现:

1. 部署或重新部署应用程序后通过 jmx-console 检查内存占用状况,在 PermGen Size 逼近限制值时及时重启 JBoss AS 。

2. 增大 PermSize 和 MaxPermSize (不建议使用相同的值)。

 

-----------------------------------------------------------------------------------------------------------------------------------

附: JBOSS 4.2.0 GA 内存配置

打开run.bat,找到

rem JVM memory allocation pool parameters. Modify as appropriate.
set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m

并将其改为:

rem JVM memory allocation pool parameters. Modify as appropriate.
set JAVA_OPTS=%JAVA_OPTS% -Xms128m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=256m

这篇关于JBoss 4.0.5GA 多次部署应用程序出现 PermGen 内存不足(溢出)问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/221864

相关文章

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1