首先需要明确内存溢出的根源,通过以下工具定位问题:
free -m查看系统内存总量、已用内存及剩余内存(包括缓存/缓冲区);用top命令找出占用内存最高的进程(重点关注WebLogic进程);用vmstat 1监控内存、交换分区(Swap)的使用趋势。jstack <pid>获取线程堆栈(分析是否有线程死锁或长时间阻塞);用jmap -dump:format=b,file=heap.dump <pid>生成堆内存快照(后续用MemoryAnalyzer等工具分析内存泄漏点)。内存溢出最常见的原因是堆内存不足,需根据应用需求调整JVM堆大小:
/home/weblogic/user_projects/domains/base_domain/bin/startWebLogic.sh),在JAVA_OPTIONS中添加或修改以下参数:
-Xms:初始堆内存大小(如-Xms1024m,建议与-Xmx一致,避免频繁扩容);-Xmx:最大堆内存大小(如-Xmx2048m,不超过物理内存的70%,避免挤压系统和其他进程);-XX:MaxMetaspaceSize=256m(替代-XX:MaxPermSize,限制元空间大小)。-Xms512m -Xmx1024m调整为-Xms2048m -Xmx2048m,并重启WebLogic使配置生效。合理的GC设置能减少内存回收对系统的影响,避免因GC停顿过长导致内存溢出:
-Xloggc:/path/to/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps(日志会记录每次GC的时间、回收的内存大小)。-XX:+UseConcMarkSweepGC,JDK 9前);-XX:+UseG1GC,JDK 9+默认);-XX:NewRatio(新生代与老年代比例,如-XX:NewRatio=2表示新生代占堆的1/3)或-XX:SurvivorRatio(Eden区与Survivor区比例)。内存泄漏是导致内存溢出的根本原因之一,需通过工具分析堆内存快照:
java.util.LinkedHashMap、java.util.ArrayList等);Connection、Statement、ResultSet)在finally块中关闭;hibernate.cache.use_second_level_cache=false,若不需要缓存)。调整WebLogic自身的参数,减少内存消耗:
20-50),避免线程过多导致内存占用过高;max-capacity(如50)和initial-capacity(如10),避免连接池过大占用内存;session-timeout(如30分钟),减少会话对象的保留时间;启用会话复制时,需权衡内存消耗与高可用性。apt-get clean清理APT软件包缓存,删除/var/cache/apt/archives中的旧包;用rm命令删除不必要的日志文件(如/var/log中的大日志);/etc/sysctl.conf,降低vm.swappiness(默认60,建议设置为10以下),减少系统将内存交换到Swap分区的倾向(Swap会降低性能);执行sysctl -p使参数生效;sudo fallocate -l 2G /swapfile,sudo chmod 600 /swapfile,sudo mkswap /swapfile,sudo swapon /swapfile),缓解内存压力。通过以上步骤,可逐步定位并解决Debian中WebLogic的内存溢出问题。需注意,优化配置后应在测试环境中验证效果,避免影响生产环境稳定性。