Linux WebLogic JVM 优化实操指南
一 目标与基线
- 明确目标:优先保障吞吐、低停顿还是稳定响应时间。对延迟敏感的业务(如实时交互/语音)应尽量避免长停顿 GC,必要时优先选择低停顿 GC 策略并严格压测验证。生产变更前建立基准指标(RT、QPS、错误率、GC 次数/停顿、CPU/内存占用),每次只调整1–2 个参数并回归压测。对 WebLogic 引擎层这类超低时延场景,Oracle 建议通过合适的 GC 选择与调参来避免任何秒级长 GC。以上做法能显著降低风险并提升调优效率。
二 堆与元空间设置
- 堆大小:生产环境建议将**-Xms 与 -Xmx 设为相同**,避免运行期扩缩堆带来的抖动;堆占用一般不超过物理内存的 70%,为 OS 和其他进程预留资源。示例:-Xms4g -Xmx4g。
- 年轻代:常见做法是将年轻代设为堆的1/3–1/2;也可用 -Xmn 直接固定。示例:-Xmn2g 或 -XX:NewRatio=2(年轻:年老≈1:2)。
- 线程栈:根据应用栈深与并发适度调整,常见 -Xss256k–1m;线程栈越小,可创建的线程越多,但过小的栈可能引发栈溢出。
- 元空间(Java 8+):默认无上限,建议设置上限防止类加载泄漏,如 -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g。
- 32/64 位限制:32 位JVM 堆通常不超过1.5–2GB;64 位无此硬限,但需考虑物理内存与 GC 效率。
三 垃圾回收器选择与关键参数
- G1 GC(Java 8+,通用推荐):平衡吞吐与停顿,适合大堆与响应时间敏感场景。示例:
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45 -XX:G1ReservePercent=15
- 并行 GC(吞吐量优先):多核 CPU、后台批处理类场景。示例:
-XX:+UseParallelGC -XX:+UseParallelOldGC -XX:ParallelGCThreads=N(N≈CPU 核数)
- ZGC / Shenandoah(Java 11+,超低停顿):超大堆与极低暂停需求。示例:
-XX:+UseZGC 或 -XX:+UseShenandoahGC
- CMS(已废弃于新版本,仅旧版参考):若必须使用,注意碎片与并发模式配置。
- 通用优化:
- 禁用显式 GC:避免外部调用触发 Full GC,建议 -XX:+DisableExplicitGC。
- 压缩指针:64 位默认开启,可显式 -XX:+UseCompressedOops(有助于降低对象引用开销)。
四 在 WebLogic 中设置 JVM 参数
- 方式一(推荐):在启动脚本中设置环境变量覆盖默认内存参数。
- 编辑域目录 bin 下的脚本(如 startWebLogic.sh),在调用前导出变量:
- Linux:export USER_MEM_ARGS=“-Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 …”
- 说明:设置 USER_MEM_ARGS 会覆盖脚本中的默认内存参数,务必一次性写入完整的内存参数列表。
- 方式二:通过管理控制台设置。
- 登录控制台 → 环境 → 服务器 → 目标服务器 → 配置 → 服务器启动 → 在“参数”字段追加所需 JVM 参数(适合无法修改脚本的场景)。
五 诊断、监控与配套系统调优
- GC 与内存诊断日志(生产建议常开):
- -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps
- -Xloggc:/path/to/gc_%t.log
- -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dumps
- 需要深度分析时可启用 JFR(商业特性):-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
- 常用监控与排障命令:
- jstat -gc 1000(观察 YGC/YGCT、FGC/FGCT、堆各代使用)
- jmap -heap (堆摘要)
- jstack (线程栈/死锁排查)
- Linux 系统层面(配合 JVM 调优):
- 文件描述符:ulimit -n 65535(临时),并在 /etc/security/limits.conf 永久配置
- TCP:/etc/sysctl.conf 中调优如 net.ipv4.tcp_tw_reuse=1、net.ipv4.tcp_fin_timeout=30,执行 sysctl -p 生效
- WebLogic 配套(与 JVM 协同):
- 线程池与 JDBC 连接池按负载调优;连接池最大值通常与工作线程数匹配或略小,避免资源争用与游标耗尽
- 视场景启用 Native I/O 提升静态资源与 I/O 性能
- 变更前在测试环境充分验证,上线后持续监控与回归压测,逐步迭代参数。