温馨提示×

Linux中WebLogic性能调优方法

小樊
44
2025-12-08 13:21:57
栏目: 智能运维

Linux下WebLogic性能调优方法

一 操作系统与网络层优化

  • 文件句柄与进程数
    • 提升单进程可打开文件数:编辑 /etc/security/limits.conf,设置如:* soft nofile 65536;* hard nofile 65536。必要时在 /etc/pam.d/login 加入 session required pam_limits.so。检查系统级上限:cat /proc/sys/fs/file-max。
  • 网络栈关键参数(/etc/sysctl.conf,执行 sysctl -p 生效)
    • 端口与本地端口范围:net.ipv4.ip_local_port_range = 1024 65535
    • 连接队列与积压:net.core.somaxconn = 4096;net.core.netdev_max_backlog = 8096
    • TIME_WAIT 复用与回收:net.ipv4.tcp_tw_reuse = 1;net.ipv4.tcp_tw_recycle = 0(在NAT/负载均衡环境慎用回收);net.ipv4.tcp_fin_timeout = 30
    • KeepAlive:net.ipv4.tcp_keepalive_time = 1800;net.ipv4.tcp_keepalive_intvl = 30;net.ipv4.tcp_keepalive_probes = 3
    • 缓冲区与自动调优:net.core.rmem_default = 262144;net.core.wmem_default = 262144;net.core.rmem_max = 16777216;net.core.wmem_max = 16777216;net.ipv4.tcp_rmem = 4096 87380 16777216;net.ipv4.tcp_wmem = 4096 65536 16777216;net.ipv4.tcp_moderate_rcvbuf = 1
    • 拥塞控制与队列:net.ipv4.tcp_congestion_control = bbr;net.ipv4.tcp_max_syn_backlog = 4096
    • 可选(启用后需评估):net.ipv4.tcp_tw_recycle(在云厂商/负载均衡/NAT场景常引发问题,默认建议关闭)
  • 虚拟内存与I/O
    • 降低换页倾向:vm.swappiness = 10
    • 脏页刷写:vm.dirty_ratio = 20;vm.dirty_background_ratio = 10
    • 文件系统挂载:使用 noatime 减少元数据写入。

二 JVM与GC调优

  • 堆与元空间
    • -Xms-Xmx 设为相同,避免运行期扩缩堆带来的抖动;堆占用建议不超过物理内存的 70%,为 OS 与其他进程预留资源。
    • Java 8 及以下:设置 -XX:PermSize / -XX:MaxPermSize;Java 8+ 使用 -XX:MetaspaceSize / -XX:MaxMetaspaceSize(建议设置上限,防止元空间泄漏)。
  • 年轻代与Survivor
    • 常见做法:将年轻代设置为堆的 1/3~1/2,如 -Xmn;设置 -XX:SurvivorRatio=8(Eden:Survivor=8:1)。
  • 垃圾回收器选择
    • 吞吐量优先(多核、批处理):-XX:+UseParallelGC -XX:+UseParallelOldGC
    • 低延迟优先(Web 交互):-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1ReservePercent=15 -XX:InitiatingHeapOccupancyPercent=35
    • 超大堆与极低暂停(Java 11+):-XX:+UseZGC-XX:+UseShenandoahGC
  • 诊断与稳定性
    • 开启 OOM 堆转储: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path
    • GC 日志: -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Xloggc:/path/gc_%t.log
    • 禁用显式 GC: -XX:+DisableExplicitGC
    • 64 位默认开启: -XX:+UseCompressedOops
  • 配置位置
    • setDomainEnv.sh 或服务器启动参数中设置 MEM_ARGS / JAVA_OPTIONS;也可在控制台:环境 → 服务器 → 目标服务器 → 配置 → 服务器启动 → Java 虚拟机选项。

三 WebLogic线程池与工作管理

  • 优先使用自调优与工作管理器
    • 新版本 WebLogic 默认启用 自调优执行队列,并通过 Work Managers 分配请求;传统“Execute Queues”仅用于兼容。Oracle 建议迁移至 Work Managers 以获得更好的吞吐与稳定性。
  • 老版本或必须沿用执行队列时的要点
    • WebLogic 8.1 默认线程数:开发模式 15,生产模式 25;可按需调整 ThreadCount,但不宜盲目增大,线程过多会增加上下文切换与内存开销。
    • 若升级到 10.x 仍需使用 8.1 风格队列,需在 config.xml 为 server 增加:true,重启后显式创建 weblogic.kernel.Default 队列并配置 ThreadCount。
  • 监控与排障
    • 关注控制台监控的 Queue Length(等待队列长度,理想情况接近 0)、执行线程利用率与 Stuck Thread(卡死线程)告警;卡死线程阈值(StuckThreadMaxTime)默认 600s,仅在确认长事务合理时再适度增大,更关键是优化慢请求与数据库瓶颈。

四 数据源与连接池

  • 连接池容量与伸缩
    • 合理设置 Initial CapacityMax CapacityCapacity Increment,避免过小导致频繁创建连接、过大导致数据库负载过高。
    • 配置 Inactive Connection TimeoutConnection Reserve TimeoutTest Connections On Reserve 等,及时回收空闲/失效连接,避免“连接风暴”。
  • SQL 与应用侧优化
    • 合理使用连接、减少长事务与慢 SQL;为高频查询建立合适索引;尽量使用连接池归还策略(如 Statement/Close 在 finally 中确保执行)。

五 监控验证与实施步骤

  • 基线建立与压测
    • 在调整前建立性能基线(吞吐、P95/P99 延迟、错误率、CPU/内存/磁盘/网络、GC 次数与时间、线程队列等),每次仅调整 1–2 个参数并做回归压测与 A/B 对比。
  • 常用观测手段
    • Linux:top/vmstat/pidstat、ss -s、netstat -s、sar -n TCP;WebLogic:控制台监控、WLST、JMX(JConsole/VisualVM)。
    • JVM 诊断:jstat -gc 1000、jmap -heap 、jstack ;必要时采集 thread dump / heap dump 分析。
  • 实施清单
    • 资源与内核:文件句柄、somaxconn、tcp_tw_reuse/tcp_fin_timeout、rmem/wmem、swappiness、dirty_ratio、noatime。
    • JVM:Xms/Xmx、Xmn、SurvivorRatio、GC 策略、HeapDumpOnOOM、GC 日志。
    • WebLogic:自调优/Work Managers 或执行队列、线程与队列监控、Stuck Thread 阈值、数据源容量与超时。
    • 验证:压测脚本(如 JMeter/AB)、指标对比、回滚预案与变更记录。

0