WebLogic在Ubuntu环境下出现内存溢出(OutOfMemoryError)是常见问题,主要与JVM内存配置、永久代空间、代码内存泄漏或系统资源限制有关。以下是针对性的解决步骤:
内存溢出的最常见原因是JVM堆空间或永久代空间不足。需修改WebLogic域的启动脚本,增加内存分配:
bin目录(如/u01/weblogic/user_projects/domains/your_domain/bin)。setDomainEnv.sh文件(Ubuntu下对应Windows的setDomainEnv.cmd),找到JVM参数部分。-Xms)和最大堆大小(-Xmx)为相同值(避免堆动态扩展的开销),例如:export MEM_MAX_HEAP_SIZE_64BIT="-Xms2048m -Xmx2048m"
(根据服务器物理内存调整,建议不超过物理内存的70%)PermGen space错误,增加永久代最大值:export MEM_MAX_PERM_SIZE_64BIT="-XX:MaxPermSize=512m"
(Java 8及以上版本需替换为元空间参数-XX:MaxMetaspaceSize=512m)若调整内存后仍频繁溢出,需通过工具定位内存泄漏点(如未释放的对象、重复加载的类):
jmap命令捕获内存快照(需知道WebLogic进程ID,可通过jps或ps -ef | grep weblogic获取):jmap -dump:format=b,file=/tmp/weblogic_heap.dump <pid>
.dump文件,查看“Dominator Tree”(支配树),找出占用内存最多的对象(如java.util.LinkedHashMap、Hibernate实体集合等),定位泄漏代码。http://localhost:7001/console),导航至“环境→服务器→<你的服务器>→配置→线程池”,调整“最大线程数”(建议设置为100-200,根据并发量调整)。export JAVA_OPTS="$JAVA_OPTS -Xloggc:/tmp/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
通过gc.log可判断是否存在“Full GC频繁”“内存回收率低”等问题。top、htop或free -h命令实时查看内存使用情况,若系统内存不足,需增加物理内存或配置Swap分区(避免OOM Killer终止WebLogic进程)。echo -1000 > /proc/<pid>/oom_score_adj
sync; echo 3 > /proc/sys/vm/drop_caches
通过以上步骤,可有效解决Ubuntu环境下WebLogic的内存溢出问题。需结合日志分析、工具检测和系统调优,从根源上预防内存泄漏,确保应用稳定运行。