AIX+WebSphere+Oracle环境下的OutOfMemoryError解决实战
需积分: 15 61 浏览量
更新于2024-07-24
收藏 847KB DOCX 举报
"本文详细记录了解决was6.1在AIX操作系统和ORACLE数据库环境下遇到的OutOfMemoryError问题的过程,涉及的技术栈包括J2EE、WebSphere Portal Server V6.1以及自有的技术框架。在用户量增加后,服务器崩溃,通过分析日志和heapdump文件,发现内存主要被大量的类对象占用,例如`org.eclipse.osgi.framework.log.FrameworkLogEntry`、`java.lang.Object`、`java.lang.Integer`等。"
在深入解析之前,首先理解`OutOfMemoryError`是Java应用程序中常见的错误,通常发生在系统无法分配足够的内存来执行特定操作时。在这个特定场景中,问题出现在AIX 5.3操作系统上的WebSphere Portal Server V6.1,该服务器同时为两个平台提供服务,其中一个平台的通讯超时问题导致了线程悬挂,最终触发了内存溢出。
为了诊断问题,首先分析了was生成的heapdump文件,使用IBM Heap Analyzer工具。这个工具能帮助识别哪些对象占用了大部分内存。结果显示,`org.eclipse.osgi.framework.log.FrameworkLogEntry`类的对象占据了近1GB的内存,这是一个与OSGi框架相关的日志条目类。这可能表明应用在处理日志时产生了大量未释放的对象,可能是由于异常处理或日志记录策略不当造成的。
此外,`java.lang.Object`、`java.lang.Integer`、`java.lang.System`等基本类型的实例也占用了大量内存。这可能意味着存在大量的对象实例化,或者数据结构设计不合理,比如过多的缓存或者未正确回收的对象引用。
为了解决这个问题,可以采取以下步骤:
1. **优化日志策略**:减少日志级别,避免保存过多的日志条目,或者定期清理日志文件以释放内存。
2. **检查并调整线程池大小**:根据服务器性能和并发需求,合理设置线程池大小,避免线程过度创建。
3. **内存泄漏检测**:使用内存分析工具,如MAT(Memory Analyzer Tool),找出可能导致内存泄漏的对象和引用。
4. **优化数据结构**:检查代码中是否存在大量临时对象的创建,或过度使用集合类,可能导致内存占用过高。
5. **调整JVM内存设置**:根据应用的实际需求,适当增加JVM堆内存(`Xms`和`Xmx`),并调整其他内存池如PermGen(如果是旧版JVM)或Metaspace(如果是Java 8及以上版本)大小。
6. **监控系统资源**:实时监控服务器的CPU、内存和磁盘使用情况,以便及时发现问题。
以上分析和解决方案只是基于给出的部分内容,实际情况可能需要更深入的代码审查和系统调优。在进行任何更改时,应先在非生产环境中进行测试,确保改动不会引入新的问题。对于这种大规模的企业级应用,定期进行性能评估和优化是非常重要的,以确保系统能够稳定地处理日益增长的用户负载。
2013-12-25 上传
2018-10-16 上传
2013-03-27 上传
2011-12-06 上传
2014-05-14 上传
2013-06-21 上传
2020-09-03 上传
xgxll
- 粉丝: 0
- 资源: 3
最新资源
- 掌握Jive for Android SDK:示例应用的使用指南
- Python中的贝叶斯建模与概率编程指南
- 自动化NBA球员统计分析与电子邮件报告工具
- 下载安卓购物经理带源代码完整项目
- 图片压缩包中的内容解密
- C++基础教程视频-数据类型与运算符详解
- 探索Java中的曼德布罗图形绘制
- VTK9.3.0 64位SDK包发布,图像处理开发利器
- 自导向运载平台的行业设计方案解读
- 自定义 Datadog 代理检查:Python 实现与应用
- 基于Python实现的商品推荐系统源码与项目说明
- PMing繁体版字体下载,设计师必备素材
- 软件工程餐厅项目存储库:Java语言实践
- 康佳LED55R6000U电视机固件升级指南
- Sublime Text状态栏插件:ShowOpenFiles功能详解
- 一站式部署thinksns社交系统,小白轻松上手