Ubuntu上WebLogic内存管理优化指南
WebLogic的内存管理首先依赖JVM堆内存与非堆内存的合理分配,需通过修改域配置文件实现。
<DOMAIN_HOME>/bin/setDomainEnv.sh(部分版本可能在commEnv.sh中补充全局设置)。-Xms:初始堆内存大小(如-Xms2048m),建议设置为最大堆内存的1/4~1/3,避免JVM频繁扩容堆内存导致的性能损耗。-Xmx:最大堆内存大小(如-Xmx4096m),关键限制:Ubuntu系统为64位时,-Xmx不应超过物理内存的70%~80%(如16GB物理内存建议不超过12GB);32位系统则不应超过1.5GB(避免JVM无法启动)。-XX:PermSize:初始永久代大小(如-XX:PermSize=512m),用于存储类元数据、常量池等。-XX:MaxPermSize:最大永久代大小(如-XX:MaxPermSize=1024m),建议为-Xmx的1/4~1/2。-XX:MetaspaceSize=512m(初始元空间)、-XX:MaxMetaspaceSize=1024m(最大元空间),避免永久代溢出问题。sudo sysctl -w vm.swappiness=10(默认值为60),减少系统使用交换分区(Swap)的倾向,避免内存不足时频繁换页导致性能下降。修改后需写入/etc/sysctl.conf使其永久生效。net.core.somaxconn(监听队列长度,如sudo sysctl -w net.core.somaxconn=4096)和net.ipv4.tcp_tw_reuse(复用TIME-WAIT连接,如sudo sysctl -w net.ipv4.tcp_tw_reuse=1),提升网络I/O性能,减少连接等待时间。systemctl disable <service_name>(如bluetooth、cups)关闭Ubuntu默认启动的非必要服务,释放内存资源给WebLogic使用。sudo apt install zram-tools),启用内存压缩(将闲置内存页压缩存储),在不增加物理内存的情况下提升可用内存容量。配置文件位于/etc/default/zramswap,可调整压缩块大小(如ZRAM_BLOCKS="2")。<DOMAIN_HOME>/bin/setDomainEnv.sh中的JAVA_OPTIONS,添加线程池参数:export JAVA_OPTIONS="$JAVA_OPTIONS -Dweblogic.threadpool.MinPoolSize=200 -Dweblogic.threadpool.MaxPoolSize=4000"
MinPoolSize:最小线程数(建议200~500),保证基础并发处理能力。MaxPoolSize:最大线程数(建议3000~5000,64位系统),避免线程过多导致内存耗尽(每个线程约占用1MB栈空间)。setDomainEnv.sh,添加以下参数:export JAVA_OPTIONS="$JAVA_OPTIONS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
重启WebLogic后,可使用JConsole、VisualVM等工具连接localhost:9010查看内存指标。ps -ef | grep weblogic找到WebLogic主进程ID(PID)。jstat -gcutil <PID> 1000(每秒刷新一次),关注O(老年代使用率)、YGC(Young GC次数)、FGC(Full GC次数)。若O接近100%且FGC频繁,说明堆内存不足。setDomainEnv.sh中添加-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump.hprof,当发生OutOfMemoryError时自动生成堆转储文件,用于分析内存泄漏点。byte[]、String),通过引用链定位泄漏代码(如未关闭的数据库连接、缓存未清理的对象)。PermGen space溢出问题。