Linux环境下WebLogic内存调优指南
堆内存是WebLogic应用运行的核心内存区域,合理设置可避免频繁GC及OOM错误。
-Xms:初始堆内存大小(如-Xms1024m),建议设置为物理内存的10%-20%(不超过2GB,32位系统限制);-Xmx:最大堆内存大小(如-Xmx2048m),建议设置为物理内存的50%-70%(不超过物理内存的80%,避免占用过多系统内存)。-Xms与-Xmx设置为相同值,避免JVM频繁调整堆大小(每次调整会触发Full GC,导致应用暂停)。Java 8及以上版本移除了永久代(PermGen),改为元空间(Metaspace),用于存储类元数据。
-XX:MetaspaceSize:元空间初始大小(如-XX:MetaspaceSize=256m),默认值为21MB(过小易触发Full GC);-XX:MaxMetaspaceSize:元空间最大大小(如-XX:MaxMetaspaceSize=512m),建议设置为物理内存的10%-20%(避免元空间无限膨胀导致OOM)。-XX:PermSize(初始永久代大小)和-XX:MaxPermSize(最大永久代大小),但生产环境建议升级至Java 8+以规避永久代溢出风险。选择合适的GC策略可显著降低GC停顿时间,提升应用响应速度。
-XX:+UseG1GC参数(Java 9及以上版本默认启用G1GC)。-XX:MaxGCPauseMillis:设置最大GC停顿时间目标(如-XX:MaxGCPauseMillis=200,单位毫秒,默认200ms);-XX:G1HeapRegionSize:设置Region大小(如-XX:G1HeapRegionSize=4m,默认自动调整,范围1MB-32MB)。调整内核参数可提升系统资源利用率,减少内存瓶颈。
vm.swappiness:控制内核使用交换空间(Swap)的倾向(值越小,越倾向于使用物理内存)。建议设置为10(默认60),减少Swap使用(Swap会显著降低性能)。echo 'vm.swappiness = 10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
vm.dirty_ratio:当系统脏数据(未写入磁盘的内存数据)占比达到此值时,触发写回操作(如10,默认20%)。降低该值可减少脏数据堆积,避免IO瓶颈。echo 'vm.dirty_ratio = 10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
ulimit -n 65535;/etc/security/limits.conf,添加* soft nofile 65535和* hard nofile 65535。通过修改WebLogic启动脚本或配置文件,应用上述JVM及内核参数。
setDomainEnv.sh(位于Middleware/user_projects/domains/base_domain/bin/):WLS_MEM_ARGS变量,设置堆内存及元空间参数(适用于所有服务器实例):export WLS_MEM_ARGS_64BIT="-Xms1024m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC"
startWebLogic.sh(位于域根目录的bin/):JAVA_OPTIONS,覆盖全局内存设置(优先级高于setDomainEnv.sh):export JAVA_OPTIONS="$JAVA_OPTIONS -Xms1024m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC"
调优需结合监控数据迭代优化,避免盲目调整。
jstat(查看GC统计信息,如jstat -gcutil <pid> 1000,每秒刷新一次)、jmap(查看堆内存分布,如jmap -histo <pid>)、top/htop(查看系统内存使用情况);-Xmx,GC停顿时间过长则调整-XX:MaxGCPauseMillis);-Xss参数控制栈大小,默认1MB),建议根据CPU核心数设置(如-Xss256k);