Ubuntu上WebLogic内存管理策略
WebLogic在Ubuntu上的内存管理核心是通过JVM堆内存参数调整,主要涉及初始堆内存(-Xms)和最大堆内存(-Xmx)。这两个参数决定了JVM可使用的堆内存大小,直接影响应用性能。
bin/setDomainEnv.sh文件(如/u01/app/oracle/wls_domains/mydomain/bin/setDomainEnv.sh),通过MEM_ARGS变量设置参数。例如:export MEM_ARGS="-Xms2048m -Xmx2048m"
建议将-Xms和-Xmx设置为相同值,避免JVM动态扩展堆内存带来的性能开销。-Xms通常设置为物理内存的10%-20%(不低于2GB),-Xmx设置为物理内存的50%-70%(不超过80%,需预留内存给系统和其他进程)。Java 8及以上版本移除了永久代(PermGen),改为元空间(Metaspace),需调整对应的参数:
-XX:PermSize(初始大小)和-XX:MaxPermSize(最大大小)设置,例如:export MEM_ARGS="-Xms2048m -Xmx2048m -XX:PermSize=512m -XX:MaxPermSize=512m"
-XX:MetaspaceSize(初始大小)和-XX:MaxMetaspaceSize(最大大小),例如:export MEM_ARGS="-Xms2048m -Xmx2048m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m"
建议元空间最大值设置为256MB-512MB,避免过度占用内存。选择合适的GC算法可减少Full GC次数,提升内存回收效率:
-XX:+UseParallelGC(年轻代)和-XX:+UseParallelOldGC(老年代)启用。-XX:+UseG1GC启用,可设置最大GC停顿时间(如-XX:MaxGCPauseMillis=200)。setDomainEnv.sh文件的MEM_ARGS中添加,例如:export MEM_ARGS="-Xms2048m -Xmx2048m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
jconsole、visualvm或WLST(WebLogic Scripting Tool)脚本定期检查内存使用情况。例如,通过WLST获取堆内存信息的脚本:connect('weblogic', 'weblogic123', 't3://localhost:7001')
serverRuntime = ObjectName('com.bea:Name=your_server,Type=weblogic.management.runtime.ServerRuntimeMBean')
heapUsage = getMBean('/').getServerRuntime().getHeapMemoryUsage()
print('Used Heap: ' + str(heapUsage.getUsed() / 1024 / 1024) + 'MB')
disconnect()
-Xmx设置为物理内存的全部,需预留20%-30%给系统和其他进程(如数据库、Shell等),防止系统触发OOM Killer导致WebLogic进程被终止。