centos

centos weblogic内存溢出解决

小樊
44
2025-10-07 07:40:40
栏目: 智能运维

一、获取应用进程号
首先需要定位WebLogic应用的运行进程,使用ps -ef | grep 应用名命令过滤出目标进程的PID(进程ID),这是后续分析的基础。

二、查看JVM堆内存与GC情况
通过jstat -gcutil PID 1000 10命令(间隔1秒输出10次),监控堆内存各区域(Eden、Survivor、老年代)的使用率及GC次数、耗时。重点关注老年代使用率(若接近100%)和Full GC频率(若过高),这些是内存溢出的典型信号。

三、开启OOM堆快照
为定位内存泄漏点,在WebLogic启动脚本(如setDomainEnv.sh)中添加以下JVM参数,当发生OutOfMemoryError时自动生成堆转储文件:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdump.hprof
堆转储文件记录了内存中所有对象的状态,是分析泄漏根源的关键。

四、捕获线程栈信息
使用jstack -l PID > /path/to/jstack.txt命令获取线程栈快照,分析是否有线程阻塞(如等待数据库连接、死锁)或异常线程(如长时间处于RUNNABLE状态的线程)。重点关注STUCK线程(可通过WebLogic控制台“监控->线程”查看),其堆栈信息能指向内存消耗的代码路径。

五、分析内存分配与泄漏点
使用jmap -heap PID > /path/to/jmapHeap.txt命令查看JVM内存分配详情(如堆大小、各代占比、类加载数量),确认是否符合应用需求。更推荐使用Eclipse Memory Analyzer (MAT)VisualVM工具打开堆转储文件,通过“Dominator Tree”(支配树)功能找出占用内存最多的对象(如java.util.HashMap、自定义集合类),结合线程栈分析其引用链,定位泄漏的具体代码(如未关闭的数据库连接、缓存的无限增长)。

六、调整JVM内存参数
根据应用负载和服务器资源(物理内存),合理配置JVM参数(以setDomainEnv.sh为例):

七、优化应用程序代码
内存泄漏的根本原因多在代码层面,需重点检查:

八、增加系统资源与监控

九、定期维护与测试

0
看了该问题的人还看了