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

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入