如何在Ubuntu上优化WebLogic内存使用
WebLogic的内存使用主要由JVM堆内存决定,需根据服务器物理内存和应用负载合理配置。进入域目录下的bin文件夹(如/u01/weblogic/domains/base_domain/bin),编辑setDomainEnv.sh文件(关键配置文件),修改以下参数:
-Xms:初始堆内存大小(如-Xms2048m),建议设置为最大堆内存的1/4~1/3,避免启动时频繁扩容;-Xmx:最大堆内存大小(如-Xmx4096m),通常不超过服务器物理内存的70%(如16GB内存可设为10~12GB);-XX:MaxPermSize为-XX:MaxMetaspaceSize(如-XX:MaxMetaspaceSize=512m),避免永久代溢出问题。export MEM_ARGS="-Xms2048m -Xmx4096m -XX:MaxMetaspaceSize=512m"
注意:修改后需保存文件并重启WebLogic使配置生效。
合理的GC配置可减少Full GC次数,降低内存回收对性能的影响。在setDomainEnv.sh中添加以下JVM参数:
-XX:+UseParallelGC -XX:+UseParallelOldGC;-XX:+UseG1GC -XX:MaxGCPauseMillis=200(目标最大停顿时间200ms);-XX:ParallelGCThreads=N(N为CPU核心数的1/2~1,如8核CPU设为4)。export MEM_ARGS="$MEM_ARGS -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=4"
WebLogic的本地内存(Native Memory)包括线程栈、JDBC驱动、JNI调用等,需通过以下参数约束:
-Xss256k(默认1MB,减小可节省内存,但需避免线程过多导致StackOverflowError);-XX:MaxDirectMemorySize=512m(限制直接内存使用,如Netty等框架的堆外内存)。export MEM_ARGS="$MEM_ARGS -Xss256k -XX:MaxDirectMemorySize=512m"
为快速定位内存泄漏问题,需开启堆转储(Heap Dump)和OOM日志:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/u01/weblogic/dumps/heapdump.hprof(内存溢出时自动生成转储文件);-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/u01/weblogic/logs/gc.log(记录GC详情,便于分析内存使用趋势)。export MEM_ARGS="$MEM_ARGS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/u01/weblogic/dumps/heapdump.hprof -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/u01/weblogic/logs/gc.log"
http://服务器IP:7001/console)→「服务器」→「监控」→「内存」,实时查看堆内存、元空间、线程栈等使用情况;jstat -gcutil <PID> 1000(每秒刷新一次GC情况)、jmap -heap <PID>(查看堆内存分配)、jstack <PID>(查看线程栈,排查死锁或内存泄漏);sudo sysctl -w vm.swappiness=10(值越小越优先使用物理内存,范围0~100),并添加到/etc/sysctl.conf使其永久生效;sync; echo 3 > /proc/sys/vm/drop_caches(需root权限);sudo modprobe zram(加载模块),并通过/sys/class/zram-control/hot_add添加设备,设置压缩大小(如echo 2G > /sys/block/zram0/disksize)。