温馨提示×

WebLogic在Linux上如何调优

小樊
33
2025-12-06 13:43:53
栏目: 智能运维

Linux上 WebLogic 调优实战指南

一 基线评估与目标设定

  • 明确优化目标:提升吞吐量、降低响应时间、提高资源利用率,并避免内存泄漏线程阻塞
  • 建立性能基线:使用JMeterLoadRunner等压测工具,记录CPU内存网络吞吐磁盘 I/O等关键指标。
  • 定位瓶颈:结合压测结果识别是CPU过载内存不足/泄漏磁盘I/O延迟还是网络延迟导致。
  • 验证闭环:每次只调整1–2个参数,先在测试环境验证,再灰度上线并持续监控。
  • 监控手段:使用WLSTJMX(如JConsole)、以及操作系统工具(topvmstatiostat)进行观测与回溯。

二 操作系统与网络层调优

  • 文件句柄与进程限制
    • 查看与调整进程可打开文件数:ulimit -n;在/etc/security/limits.conf中设置如:* soft nofile 10240* hard nofile 10240;在/etc/pam.d/login加入session required pam_limits.so;系统级上限查看:cat /proc/sys/fs/file-max
  • 内存与虚拟内存
    • 降低vm.swappiness,减少换页;调整脏页刷写阈值vm.dirty_ratiovm.dirty_background_ratio)以平衡I/O与稳定性。
  • 网络参数
    • 扩大本地端口范围:net.ipv4.ip_local_port_range = 1024 65535
    • 增加连接队列:net.core.somaxconnnet.core.netdev_max_backlog
    • 启用TCP窗口缩放、选择合适的拥塞控制算法(如 BBR)
    • 调整TCP Keepalivenet.ipv4.tcp_keepalive_time等)以更快回收异常空闲连接。
    • 如启用iptables/nf_conntrack,适当提升net.netfilter.nf_conntrack_max(注意内存占用)。
  • 其他
    • 关闭不必要的服务与进程,减少资源争用;必要时开启网卡多队列提升吞吐。

三 JVM 与 WebLogic 服务器参数

  • JVM 堆与元空间(生产建议)
    • 将**-Xms-Xmx设为相同值(如-Xms8g -Xmx8g),避免运行期扩缩堆带来的抖动;堆占用建议不超过物理内存的70%**。
    • Java 8 使用Metaspace:如-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m;Java 7 及以下配置PermGen:如-XX:PermSize=… -XX:MaxPermSize=…
  • 垃圾回收器选择
    • 吞吐量优先(Java 8):-XX:+UseParallelGC -XX:+UseParallelOldGC -XX:ParallelGCThreads=N(N≈CPU核数)。
    • 低延迟优先(Web 应用常用):-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1ReservePercent=15 -XX:InitiatingHeapOccupancyPercent=35
    • 极低暂停(Java 11+):-XX:+UseZGC-XX:+UseShenandoahGC
  • GC 日志与故障排查
    • 开启日志与堆转储:-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/gc_%t.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/dumps
  • WebLogic 线程与队列
    • 通过控制台或 WLST 调整执行线程数/自调优线程池上下限,观察Queue LengthStuck Thread指标;必要时适度提高StuckThreadMaxTime,并优先优化慢请求与阻塞点。
  • 数据源与连接池
    • 合理设置初始容量/最大容量/递增步长超时,避免连接风暴与泄漏;结合数据库能力做压测校准。
  • 配置方式
    • setDomainEnv.sh中设置USER_MEM_ARGS或通过控制台“服务器 → 配置 → 服务器启动 → 参数”添加JVM参数。

四 监控验证与常见陷阱

  • 关键指标与工具
    • 应用与线程:控制台“监视 → 性能”观察Queue LengthExecute ThreadsStuck Thread;用WLST/JMX采集趋势。
    • JVM:用jstat -gc <pid> 1000jmap -heap <pid>jstack <pid>分析GC频率/停顿堆使用线程栈
    • 系统:top/vmstat/iostat定位CPU瓶颈内存压力I/O等待
  • 常见陷阱与修正
    • 线程数盲目放大:会导致上下文切换激增与CPU抖动,以压测结果为准逐步调优。
    • 一味增大堆:可能延长GC停顿并推高Full GC风险,优先选择合适的GC策略目标停顿
    • 忽略网络与文件句柄:高并发下出现连接拒绝/超时,需同步检查ulimitsomaxconnip_local_port_range等。
    • 变更无基线无回放:每次只改1–2个参数,保留变更记录回滚方案,在测试环境充分验证。

五 快速参考配置示例

  • Linux 内核(示例,需结合压测微调)
    • fs.file-max = 655350
    • net.core.somaxconn = 4096
    • net.core.netdev_max_backlog = 8096
    • net.ipv4.ip_local_port_range = 1024 65535
    • net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 0(谨慎使用recycle)
    • net.ipv4.tcp_keepalive_time = 1800net.ipv4.tcp_keepalive_intvl = 30net.ipv4.tcp_keepalive_probes = 3
    • net.ipv4.tcp_fin_timeout = 30
    • vm.swappiness = 10
    • 如启用连接跟踪:net.netfilter.nf_conntrack_max = 524288
  • JVM(示例:Java 8,G1,8C16G 机器)
    • -Xms8g -Xmx8g -Xmn3g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
    • -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1ReservePercent=15 -XX:InitiatingHeapOccupancyPercent=35
    • -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/opt/weblogic/logs/gc_%t.log
    • -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/weblogic/dumps
  • WebLogic
    • 在控制台或 WLST 调整自调优线程池上下限;结合压测校准数据源连接池容量与超时;持续观察Queue LengthStuck Thread并优先优化慢请求。

0