Linux中WebLogic性能调优技巧
小樊
45
2025-12-14 11:51:31
Linux下WebLogic性能调优要点
一 操作系统与网络
- 文件描述符与进程限制
- 提高单进程可打开文件数:在 /etc/security/limits.conf 增加如:
* soft nofile 65536、* hard nofile 65536;在 /etc/pam.d/login 加入 session required pam_limits.so;用 ulimit -n 验证。系统级上限查看:cat /proc/sys/fs/file-max。
- 可用端口与本地端口范围
- 扩大客户端端口池:net.ipv4.ip_local_port_range = 1024 65535,提升高并发短连接场景的端口可用性。
- TCP连接跟踪与会话回收
- 如启用连接跟踪(如 NAT/iptables),适当提升 net.ipv4.ip_conntrack_max;缩短回收时间以更快复用资源:net.ipv4.tcp_fin_timeout = 30(默认 240 秒)。
- 网络缓冲与队列
- 提升默认/最大套接字缓冲:net.core.rmem_default / wmem_default、net.core.rmem_max / wmem_max。
- 为长肥管道或高带宽场景设置套接字缓冲区间:net.ipv4.tcp_rmem / tcp_wmem(最小/默认/最大)。
- 加速检测死连接:net.ipv4.tcp_keepalive_time = 1800(默认 7200 秒)。
- 提升突发入站连接处理能力:net.core.netdev_max_backlog、net.core.somaxconn。
- 虚拟内存与脏页策略
- 降低换页倾向:vm.swappiness = 10;根据负载调整脏页写回阈值(如 vm.dirty_ratio / dirty_background_ratio),减少抖动。
二 JVM与垃圾回收
- 堆与元空间
- 生产环境建议 -Xms 与 -Xmx 等值(避免运行期扩缩堆带来的抖动);堆一般不超过物理内存的 70%,为 OS 与其他进程预留资源。
- Java 8+ 使用 Metaspace:设置 -XX:MetaspaceSize 与 -XX:MaxMetaspaceSize,防止无界增长。
- 年轻代与 Survivor
- 常见做法:-Xmn ≈ 堆的 1/3~1/2;可按对象生命周期调节 -XX:SurvivorRatio(如 8)。
- 垃圾回收器选择
- 吞吐量优先(Java 8):-XX:+UseParallelGC -XX:+UseParallelOldGC。
- 低延迟优先(Web 应用常用):-XX:+UseG1GC,可配合 -XX:MaxGCPauseMillis、-XX:G1ReservePercent、-XX:InitiatingHeapOccupancyPercent。
- 超大堆与极低暂停(Java 11+):-XX:+UseZGC 或 -XX:+UseShenandoahGC。
- 诊断与稳定性
- 开启 OOM 堆转储:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=…。
- GC 日志:-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/gc_%t.log。
- 避免显式 GC:-XX:+DisableExplicitGC;64 位默认开启 -XX:+UseCompressedOops;生产启用 -XX:+UseServer。
- 在 WebLogic 中设置
- 推荐在 $DOMAIN_HOME/bin/setDomainEnv.sh 中设置 USER_MEM_ARGS;或在控制台:环境 → 服务器 → 目标服务器 → 配置 → 服务器启动 → 参数。
三 WebLogic线程与工作管理
- 使用 Work Managers 而非传统执行队列
- 新版 WebLogic 默认启用自调优执行队列,官方建议通过 Work Managers 来分配与优化请求处理,必要时再考虑回退到 8.1 风格队列(需显式配置并重启)。
- 老版本或兼容模式的队列调优
- 若使用 8.1 风格队列,默认线程数:开发模式 15、生产模式 25;可按需调大 ThreadCount,但盲目增大将增加上下文切换与内存开销,需结合压测评估。
- 监控与排障要点
- 关注控制台 Monitoring → Performance 中的 Queue Length(等待队列),应接近 0;持续大于 0 表示处理能力不足或存在阻塞。
- 合理设置 Stuck Thread Max Time(默认 600 秒),配合应用优化与线程数调整,避免“卡线程”拖垮服务。
四 数据库与连接池
- 合理设置 JDBC 连接池
- 最大连接数不应超过数据库最大连接上限;初始/最小连接数保证冷启动可用;根据负载设置合理的递增/递减与超时策略,避免连接风暴与泄漏。
- 语句与事务优化
- 使用预编译语句、合理的Fetch Size与批量提交;减少长事务与锁等待;对热点数据使用应用级缓存(如 Redis/Memcached)降低数据库压力。
- 连接泄漏治理
- 启用泄露检测与超时回收;在测试与生产中持续验证连接数曲线与回收时延。
五 部署架构与监控实践
- 架构层面优化
- 将静态资源上 CDN,减少应用节点压力;前置 负载均衡 做横向扩展与故障隔离;读写分离、缓存层与异步化改造可显著提升吞吐与稳定性。
- 持续监控与迭代
- 监控 CPU、内存、磁盘 I/O、网络、JVM GC、线程队列、DB 连接 等关键指标;使用 Nagios/Zabbix 等做告警;以基准测试 → 逐步调参 → 压力测试 → 复盘的闭环持续优化。