温馨提示×

Linux下如何优化WebLogic性能

小樊
39
2025-12-10 13:05:02
栏目: 智能运维

Linux下WebLogic性能优化实战指南

一 操作系统与网络层优化

  • 文件描述符与进程限制
    • 提高单进程可打开文件数:临时执行 ulimit -n 65535;永久在 /etc/security/limits.conf 增加:
        • soft nofile 65535
        • hard nofile 65535
    • /etc/pam.d/login 加入:session required /lib/security/pam_limits.so(确保登录会话继承限制)。
  • TCP/IP 内核参数(/etc/sysctl.conf)
    • 扩大本地端口范围与启用端口复用:
      • net.ipv4.ip_local_port_range = 1024 65535
      • net.ipv4.tcp_tw_reuse = 1
      • net.ipv4.tcp_fin_timeout = 30
    • 提升 TCP 缓冲与启用保活(按带宽与延迟调优):
      • net.core.rmem_default = 131072;net.core.wmem_default = 131072
      • net.core.rmem_max = 134217728;net.core.wmem_max = 134217728
      • net.ipv4.tcp_rmem = 4096 87380 134217728
      • net.ipv4.tcp_wmem = 4096 65536 134217728
      • net.ipv4.tcp_keepalive_time = 1800
    • 如启用连接跟踪(如 iptables NAT),适当提升:
      • net.ipv4.ip_conntrack_max = 1048576
    • 应用生效:sysctl -p。以上可显著改善高并发下的连接建立与长连接稳定性。

二 JVM与GC策略

  • 堆与元空间(生产建议)
    • 将初始堆与最大堆设为相同,避免运行期扩缩容抖动:如 -Xms8g -Xmx8g
    • Java 8 使用 Metaspace 并设上限:-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m;Java 7 及以下使用 PermGen:-XX:PermSize=128m -XX:MaxPermSize=256m
  • 垃圾回收器选择
    • 吞吐量优先(多核、批处理):-XX:+UseParallelGC -XX:+UseParallelOldGC
    • 低延迟优先(Web 交互):-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1ReservePercent=15 -XX:InitiatingHeapOccupancyPercent=35
    • 超大堆与极低暂停(Java 11+):-XX:+UseZGC 或 -XX:+UseShenandoahGC
  • 常用诊断与稳定性参数
    • -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/weblogic/heapdumps
    • -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/opt/weblogic/logs/gc_%t.log
    • -XX:+DisableExplicitGC(避免应用误调用 System.gc)
  • 配置位置
    • 在域目录的 setDomainEnv.sh 中设置 MEM_ARGS 与 GC 参数,或在控制台:环境 → 服务器 → 目标服务器 → 配置 → 服务器启动 → 参数。

三 WebLogic服务器与线程池

  • 运行模式
    • 生产环境务必使用产品模式(默认队列与连接池更保守,利于稳定与吞吐)。
  • 执行线程与队列
    • 传统队列(如 weblogic.kernel.Default):适度提高 Thread Count,配合监控“队列长度”和“吞吐”。经验上以 每CPU约25–50线程为上限进行压测校准,避免线程过多导致上下文切换开销。
    • 自调优线程池(WLS 9+):优先使用自调优;如确需限定边界,可通过系统属性设置最小/最大线程数(示例:-Dweblogic.threadpool.MinPoolSize=100 -Dweblogic.threadpool.MaxPoolSize=500)。
  • 阻塞线程与告警
    • 关注 Stuck Thread:默认 600s 可能偏短,可根据业务适当调大(如 1200s),同时必须优化慢请求,避免仅通过加时掩盖问题。
  • 网络与I/O
    • 在服务器配置中启用本地I/O(Native I/O)以降低网络栈开销(视平台与驱动支持)。

四 数据源与应用程序层

  • JDBC连接池
    • 合理设置初始/最大连接数与增量,避免过小导致排队、过大导致数据库过载;结合压测找到拐点(如初始 25、最大 100 起步,按TPS/响应时间微调)。
  • 应用优化
    • 减少慢 SQL、批处理合并、合理使用缓存(如 Redis/Memcached)、避免频繁对象创建与深层嵌套循环;静态资源走 CDN、入口接入 负载均衡 横向扩展。
  • 开发与运行期细节
    • 生产关闭开发期特性:JSP 预编译(precompile=true)、关闭页面与 Servlet 自动重载(如 pageCheckSeconds、ServletReloadCheckSecs 设为 -1)以减少文件扫描与类加载开销。

五 监控验证与容量规划

  • 监控与诊断
    • Linux:top/vmstat/ss -s/netstat -s;关注 CPULoad文件句柄TIME_WAIT 与重传。
    • JVM:jstat -gc 1000、jmap -heap 、jstack ;结合 GC 日志分析停顿与晋升行为。
    • WebLogic:控制台“监视 → 性能”观察 Queue Length、吞吐、线程使用率;设置告警(队列堆积、Stuck Thread、Full GC 频繁)。
  • 容量与扩展
    • 通过压测建立基线,按“每次只调整1–2个参数、对比前后指标”的方法迭代;必要时引入集群负载均衡提升并发与可用性。

0