1. 调整JVM堆内存参数(核心优化项)
WebLogic的内存管理首先需合理配置JVM堆内存,避免因堆空间不足导致OutOfMemoryError。关键参数包括:
-Xms:初始堆内存大小(如-Xms2048m),建议设置为与-Xmx相同,避免堆内存动态扩展带来的性能损耗;-Xmx:最大堆内存大小(如-Xmx4096m),不应超过物理内存的50%~60%(如Ubuntu服务器有8GB物理内存,-Xmx建议设为4~5GB),留出足够内存给系统和其他进程;-XX:MaxMetaspaceSize(Java 8+替代-XX:MaxPermSize):元空间最大大小(如-XX:MaxMetaspaceSize=512m),解决永久代内存溢出问题。bin文件夹(如/weblogic/Middleware/user_projects/domains/base_domain/bin),编辑setDomainEnv.sh文件,添加或修改WLS_MEM_ARGS_64BIT变量(64位系统):export WLS_MEM_ARGS_64BIT="-Xms2048m -Xmx4096m -XX:MaxMetaspaceSize=512m"
export WLS_MEM_ARGS_32BIT="-Xms2048m -Xmx4096m -XX:MaxMetaspaceSize=512m" # 32位系统同理
通过上述设置,可确保WebLogic在启动时分配足够的堆内存,避免频繁GC。
2. 优化线程池内存分配
线程池是WebLogic处理并发请求的核心组件,不合理的内存分配会导致线程阻塞或内存溢出。需调整以下参数:
-Dweblogic.threadpool.MinPoolSize:线程池最小线程数(如500),建议设置为CPU核心数的1~2倍;-Dweblogic.threadpool.MaxPoolSize:线程池最大线程数(如3000),建议设置为CPU核心数的5~10倍(如4核CPU设为20~40)。setDomainEnv.sh文件中添加:export JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.threadpool.MinPoolSize=500"
export JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.threadpool.MaxPoolSize=3000"
合理的线程池配置可平衡并发处理能力和内存占用,避免因线程过多导致内存耗尽。
3. 启用压缩闲置内存(提升内存利用率)
Ubuntu系统可通过zram(压缩内存块设备)或zswap(交换分区压缩)技术,将闲置内存页压缩存储,释放更多物理内存给WebLogic使用。
sudo apt install zram-tools
/etc/default/zramswap,设置压缩内存大小(如SIZE_PERCENT=50表示使用50%空闲内存):SIZE_PERCENT=50
ALGO=lz4 # 使用lz4压缩算法(速度快、压缩比适中)
sudo systemctl restart zramswap
zram无需额外磁盘空间,且压缩后的内存访问速度接近物理内存,适合内存紧张的场景。
4. 调整内核参数优化内存管理
通过修改Ubuntu内核参数,可提升WebLogic的内存使用效率和系统稳定性:
/etc/security/limits.conf,添加以下内容(适用于所有用户):* soft nofile 65535
* hard nofile 65535
文件描述符限制过低会导致WebLogic无法处理大量并发连接,引发内存泄漏。/etc/sysctl.conf,设置vm.swappiness(默认60,值越低越倾向于使用物理内存):vm.swappiness=10 # 减少交换分区使用,提升内存利用率
执行sudo sysctl -p使配置生效。/etc/sysctl.conf,添加以下内容(减少磁盘I/O,提升内存写入效率):vm.dirty_background_ratio=10 # 当脏页占总内存10%时开始后台刷新
vm.dirty_ratio=20 # 当脏页占总内存20%时强制刷新
执行sudo sysctl -p使配置生效。5. 监控与诊断内存使用
定期监控WebLogic的内存使用情况,及时发现内存泄漏或配置不合理问题:
http://<服务器IP>:<端口>/console),导航至“服务器→监控→内存”页面,查看堆内存、非堆内存的使用趋势;top、htop命令查看WebLogic进程的内存占用(按M键按内存排序),或使用jstat命令监控GC情况(如jstat -gc <PID> 1000,每秒刷新一次);OutOfMemoryError,可通过jmap命令生成堆转储文件(如jmap -dump:format=b,file=/tmp/heap.hprof <PID>),使用Eclipse MAT或VisualVM分析内存泄漏点。6. 系统级资源限制
通过cgroups限制WebLogic进程的资源使用,防止其过度占用系统内存导致其他服务崩溃:
sudo apt install cgroup-tools
sudo cgcreate -g memory:/weblogic_group
echo 3G | sudo tee /sys/fs/cgroup/memory/weblogic_group/memory.limit_in_bytes
sudo cgclassify -g memory:weblogic_group <PID>
通过cgroups可精细化控制WebLogic的内存使用,提升系统整体稳定性。