centos下weblogic性能调优技巧
小樊
42
2025-12-27 13:57:45
CentOS 下 WebLogic 性能调优要点
一 操作系统层优化
- 文件句柄与进程限制
- 提高进程可打开文件数,避免“Too many open files”:
- 临时:ulimit -n 65535
- 永久:在 /etc/security/limits.conf 增加
- 网络栈与端口
- 扩大本地端口范围、连接队列与 SYN 队列,提升高并发连接能力:
- net.ipv4.ip_local_port_range = 1024 65535
- net.core.somaxconn = 65535
- net.ipv4.tcp_max_syn_backlog = 1024
- net.ipv4.tcp_max_tw_buckets = 5000
- 可选:net.ipv4.tcp_tw_reuse = 1;net.ipv4.tcp_fin_timeout = 30
- 使配置生效:sysctl -p
- 虚拟内存与 I/O
- 降低 swap 倾向,减少抖动:vm.swappiness = 10
- 适度提高脏页回写阈值:vm.dirty_ratio = 100
- 资源与运行环境
- 使用专用非 root 用户运行 WebLogic;关闭不必要的系统服务与端口;生产环境启用 生产模式;优先选用与版本匹配的 Oracle JDK。
二 JVM 层优化
- 堆与元空间
- 将初始堆与最大堆设为相同,减少运行时扩缩抖动:如 -Xms4g -Xmx4g
- 控制元空间增长:如 -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g
- 垃圾回收器
- Java 8 及以后优先使用 G1GC(低停顿、可预测):-XX:+UseG1GC
- 可设置目标停顿时间与触发阈值(按负载微调):-XX:MaxGCPauseMillis=200;-XX:InitiatingHeapOccupancyPercent=45
- 线程栈
- 高并发可适当降低线程栈以节省内存:-Xss256k~512k(深度递归可适当增大)
- GC 日志与诊断
- 开启 GC 日志便于定位问题:-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/weblogic/logs/gc.log
- 其他常用
- 禁用显式 GC:-XX:+DisableExplicitGC
- 启用分层编译(默认开启):-XX:+TieredCompilation
- 配置落地
- 在域目录的 setDomainEnv.sh 中设置 JAVA_OPTIONS,例如:
- JAVA_OPTIONS=“${JAVA_OPTIONS} -Xms4g -Xmx4g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+PrintGCDetails -Xloggc:/weblogic/logs/gc.log”
三 WebLogic 服务器层优化
- 线程池与工作管理器
- 现代版本(如 12c/12.2.x)使用自调优线程池,可在控制台观察:环境 → 服务器 → 监视 → 线程池
- 关键指标:活动/空闲执行线程、暂挂请求、队列长度、阻塞线程、吞吐量、健康状况
- 调优思路:当“暂挂请求/队列长度”持续升高且 CPU 未打满时,适度提高最小/最大线程;若出现大量阻塞,优先排查应用慢 SQL、外部依赖、锁竞争
- 老版本(如 9.x/10.x)可在 config.xml 设置自调优范围或沿用执行队列:
- 与
- 或配置 weblogic.kernel.Default 的 Thread Count
- 粘滞线程与超时
- 合理设置“Stuck Thread Max Time”(控制台:服务器 → 配置 → 调优),默认 600s,长事务可适当放宽,同时必须优化慢请求根因
- 数据源与连接池
- 结合压测设置初始/最大连接数、递增步长、超时与验证查询;避免连接泄漏与过度占用 DB 资源
- 传输与协议
- 大报文或文件上传场景,可按需调大消息上限:-Dweblogic.MaxMessageSize=20000000
- 运行模式与本地 I/O
- 生产环境启用生产模式;在可用情况下启用本地 I/O 提升网络 I/O 效率。
四 监控 验证与迭代
- 监控手段
- OS 层:top/vmstat/ss -s/netstat -s 观察 CPU、内存、网络与套接字
- JVM 层:jstat -gc/-gccapacity、jstack、VisualVM/JConsole、GC 日志分析
- WebLogic 层:控制台“监视”页、WLST 采集、JMX(如 JConsole 直连)
- 验证方法
- 先在测试环境变更参数并进行压测(如 JMeter/Gatling),对比 吞吐量、P95/P99 延迟、队列长度、GC 停顿与次数、错误率
- 每次只变更少量参数,控制变量法定位收益与回退点
- 迭代原则
- 以“瓶颈优先”为原则:先排除慢 SQL/慢下游/锁竞争,再调线程与连接;堆与 GC 调整需配合 GC 日志长期观测
- 所有变更先在测试环境验证,再灰度上线,保留回滚方案
五 快速参考参数清单
- OS(/etc/sysctl.conf 与 limits.conf)
- fs.file-max = 65535
-
- net.ipv4.ip_local_port_range = 1024 65535
- net.core.somaxconn = 65535
- net.ipv4.tcp_max_syn_backlog = 1024
- net.ipv4.tcp_max_tw_buckets = 5000
- vm.swappiness = 10;vm.dirty_ratio = 100
- JVM(setDomainEnv.sh 中的 JAVA_OPTIONS)
- -Xms4g -Xmx4g
- -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45
- -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g
- -Xss256k~512k
- -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/weblogic/logs/gc.log
- -XX:+DisableExplicitGC -XX:+TieredCompilation
- WebLogic
- 控制台观察并调优“自调优线程池”参数;必要时设置 Stuck Thread Max Time
- 大报文: -Dweblogic.MaxMessageSize=20000000
- 老版本可在 config.xml 设置 <self-tuning-thread-pool-size-min/max> 或执行队列 Thread Count