首先需要确认内存溢出的具体情况,通过工具定位问题根源。
free -m查看系统整体内存使用(总内存、已用、剩余);top或htop找出占用内存高的进程(重点关注WebLogic进程);vmstat 1监控内存、交换分区(Swap)的使用趋势。http://服务器IP:7001/console)进入“服务器→监控→性能”模块,查看堆内存使用率、线程池状态、数据库连接池使用情况;或使用setDomainEnv.sh中的-Dcom.sun.management.jmxremote开启JMX,配合JConsole、VisualVM等工具远程监控。/home/weblogic/user_projects/domains/base_domain/servers/AdminServer/logs/目录下的server.log、console.log),搜索“OutOfMemoryError”关键词,确认溢出类型(如堆溢出、元空间溢出)。根据应用需求合理配置堆内存和元空间,避免因内存不足导致溢出。
bin/setDomainEnv.sh文件,在JAVA_OPTIONS中添加或调整以下参数:
-Xms:初始堆内存(如-Xms1g,建议与-Xmx一致,避免频繁扩容);-Xmx:最大堆内存(如-Xmx4g,不超过物理内存的70%,避免占用过多系统内存);-XX:MaxMetaspaceSize=512m(默认无限制,易导致元空间溢出);-XX:+UseG1GC -XX:MaxGCPauseMillis=200(目标最大GC暂停时间200ms)。./stopWebLogic.sh && ./startWebLogic.sh)使配置生效。内存泄漏是导致内存溢出的常见原因,需通过工具定位泄漏点并修复。
setDomainEnv.sh中添加-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heapdump.hprof,当发生内存溢出时自动生成堆快照文件。.hprof文件,查看“支配树”“泄漏嫌疑对象”,定位持有大量对象的类或方法(如未关闭的数据库连接、缓存未清理的对象)。try-with-resources语句);static Map);调整WebLogic自身配置,减少内存消耗。
setDomainEnv.sh,调整线程池大小(根据并发请求量设置):-Dweblogic.threadpool.MinThreads=50(最小线程数)、-Dweblogic.threadpool.MaxThreads=500(最大线程数),避免线程过多导致内存占用过高。初始容量(Initial Capacity):设置为预期并发连接数的80%;最大容量(Max Capacity):不超过数据库允许的最大连接数;超时设置(Inactive Connection Timeout Seconds):设置为30-60秒,及时回收闲置连接。通过调整操作系统设置,提升内存使用效率。
apt-get clean清理APT缓存(删除已下载的软件包);使用sync && echo 3 > /proc/sys/vm/drop_caches清理PageCache、Slab缓存(不影响正在运行的程序)。/etc/sysctl.conf,优化内存管理:
vm.swappiness=10(降低内核将内存交换到Swap的倾向,10表示仅在内存不足时使用Swap);vm.dirty_ratio=20(脏页占内存的比例达到20%时触发写回磁盘);sysctl -p使参数生效。free -m显示剩余内存<10%),建议升级服务器物理内存(DDR4/DDR5 ECC内存更稳定)。建立长效监控机制,提前预警内存溢出风险。
通过以上步骤,可有效解决Debian系统上WebLogic的内存溢出问题。需注意的是,优化过程应遵循“先监控、后调整”的原则,在测试环境中验证配置效果后再应用于生产环境。