优化Linux环境下WebLogic Server的内存使用,需从系统级调优、WebLogic配置调整、JVM参数优化、监控与维护四大维度入手,兼顾性能提升与稳定性保障。
系统级调优是WebLogic内存优化的基础,需先确保Linux系统本身的内存管理高效。
swappiness参数:vm.swappiness控制内核使用交换分区的倾向(0-100,默认60)。降低该值可减少系统对交换空间的依赖,提升物理内存利用率。建议设置为10(生产环境推荐),命令如下:echo 'vm.swappiness = 10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
dirty_ratio参数:vm.dirty_ratio表示系统文件系统中脏数据(未写入磁盘的内存数据)占比达到该值时,触发强制写回操作。适当降低可减少I/O压力,建议设置为10-20:echo 'vm.dirty_ratio = 10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 系统配置(/etc/sysctl.conf)
vm.nr_hugepages=1024 # 根据内存需求调整(每页2MB,1024页=2GB)
# WebLogic启动脚本(setDomainEnv.sh)
export USER_MEM_ARGS="-XX:+UseLargePages -XX:LargePageSizeInBytes=2m"
zram/zswap压缩闲置内存:将闲置内存页压缩存储,减少交换分区使用,提升活跃进程的内存可用性。例如,使用zram创建压缩内存块设备:sudo modprobe zram
echo lz4 > /sys/block/zram0/comp_algorithm # 选择压缩算法(lz4性能好)
echo 2G > /sys/block/zram0/disksize # 设置压缩内存大小(根据需求调整)
sudo mkswap /dev/zram0
sudo swapon /dev/zram0
sudo cgcreate -g memory:/weblogic_group
echo 4G > /sys/fs/cgroup/memory/weblogic_group/memory.limit_in_bytes
sudo cgexec -g memory:weblogic_group /path/to/startWebLogic.sh
WebLogic的内存配置需结合应用负载与服务器资源,重点优化堆内存、本地内存及内存池。
setDomainEnv.sh):这是调整WebLogic内存的核心配置文件,需设置堆内存(-Xms、-Xmx)及永久代/元空间(-XX:MaxPermSize/-XX:MaxMetaspaceSize)。示例:export MEM_ARGS="-Xms2048m -Xmx2048m -XX:MaxMetaspaceSize=512m" # Java 8及以上用Metaspace替代永久代
-Xms(初始堆)建议等于-Xmx(最大堆),减少内存碎片;-Xmx不超过服务器物理内存的70%(避免影响系统及其他应用)。-XX:MaxPermSize(建议256-512MB);Java 8及以上用-XX:MaxMetaspaceSize(建议256-512MB,无固定上限但需避免溢出)。native-memory):WebLogic的本地内存(如JDBC驱动、JNI代码使用的内存)需单独设置,避免占用过多堆外内存。在config.xml中添加:<memory-management>
<native-memory enabled="true" size="512m" />
</memory-management>
config.xml中配置内存池:<memory-management>
<memory-pool name="MyMemoryPool" capacity="1024m" steady-capacity="512m" />
</memory-management>
JVM参数直接影响内存管理与垃圾回收效率,需根据应用特点选择合适的GC策略。
-XX:+UseParallelGC,年轻代用PSYoungGen,老年代用ParOldGen),适合后台批处理应用。-XX:+UseG1GC),适合高并发、低延迟应用(如电商系统)。示例:export MEM_ARGS="-Xms2048m -Xmx2048m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
-Xmn(年轻代与老年代的比例,默认1:2)。建议设置为堆内存的1/3-1/2(如-Xms2048m -Xmx2048m -Xmn1024m),减少Minor GC频率。-XX:MaxMetaspaceSize(Java 8+),避免元空间溢出(默认无上限,但会占用大量本地内存)。export MEM_ARGS="-Xms2048m -Xmx2048m -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log"
内存优化需持续监控,及时发现并解决问题。
top(查看进程内存占用)、htop(可视化内存使用)、free -m(查看内存总量与交换分区使用)、vmstat 1(查看内存、I/O、CPU实时状态)。jconsole(图形化监控JVM内存、线程)、VisualVM(更强大的JVM监控与分析)、WebLogic控制台(服务器→监控→内存,查看堆内存、非堆内存使用)。jmap生成堆转储文件,分析内存泄漏点:jmap -dump:format=b,file=/path/to/heapdump.hprof <pid>
jhat或Eclipse MAT分析堆转储文件,查找占用内存大的对象(如未关闭的数据库连接、缓存未清理的对象)。-XX:MaxMetaspaceSize。通过以上步骤,可有效优化Linux上WebLogic的内存使用,提升应用性能与系统稳定性。需注意的是,优化参数需结合实际应用负载与服务器资源,避免盲目调整。