Debian上优化WebLogic性能的可落地方案
一 系统层优化
- 内核与网络栈
- 提升文件描述符上限:编辑 /etc/security/limits.conf 与 /etc/systemd/system.conf(或服务的 drop-in),为运行 WebLogic 的用户设置如 nofile=65536;在 systemd 服务单元中添加 LimitNOFILE=65536。
- 优化 TCP:在 /etc/sysctl.conf 中适度增大网络缓冲与队列,例如:
- 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.core.netdev_max_backlog=5000
- net.ipv4.tcp_tw_reuse=1
- net.ipv4.tcp_fin_timeout=30
执行 sysctl -p 使配置生效。
- 资源与I/O
- 关闭不必要的服务与自启项,减少资源争用;使用 systemctl disable 。
- 选择 轻量级桌面(如 LXDE/XFCE)或无图形环境;必要时优化文件系统与预读策略。
- 监控与诊断:部署 Prometheus + Grafana 做资源与JVM指标可视化,配合 top/htop/vmstat/iostat 与 perf/valgrind 定位瓶颈。
二 JVM层优化
- 堆与元空间
- 将初始堆与最大堆设为相同,避免运行期扩缩堆带来的抖动:如 -Xms4g -Xmx4g(按物理内存与应用特性调整)。
- 元空间建议显式上限:如 -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g(JDK 8+)。
- 垃圾回收
- 大堆与低停顿优先选用 G1 GC:如 -XX:+UseG1GC,并结合业务停顿目标设置 -XX:MaxGCPauseMillis=200,触发并发GC的占用率 -XX:InitiatingHeapOccupancyPercent=45。
- 编译与栈
- 启用分层编译 -XX:+TieredCompilation;根据应用线程栈需求设置 -Xss256k(避免过大浪费、过小栈溢出)。
- 诊断与稳定性
- 开启 GC 日志:-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/weblogic/gc.log;必要时使用 JFR(需商业特性许可):-XX:+UnlockCommercialFeatures -XX:+FlightRecorder。
- 避免应用误调用 System.gc():-XX:+DisableExplicitGC。
三 WebLogic层优化
- 执行线程与工作队列
- 通过控制台或 WLST 调整 Execute Queue/线程池 的 Thread Count,缓解高并发下的排队与阻塞;同时关注 Stuck Thread Max Time,对长时任务设置合理阈值并优化慢业务。
- 连接池与数据源
- 在数据源中合理设置 Initial/Maximum Capacity、Min/Max Idle、Statement Cache Size、Connection Timeout、Test Connections on Reserve,避免连接风暴与泄漏。
- 协议与传输
- 启用 HTTP 持久连接/Keep-Alive 与 NIO/多路复用;如使用 SSL,优先 TLSv1.2+、启用会话缓存与合适的密码套件,减少握手开销。
- 集群与高可用
- 需要横向扩展时配置 WebLogic 集群,并启用会话复制/共享(如数据库或 Coherence),配合 负载均衡 提升吞吐与容错。
四 监控 日志 与 维护
- 监控与告警
- 在控制台与 JMX 上持续观察 JVM 堆/GC、线程池使用率、队列长度、数据源活跃连接、响应时间;结合 Prometheus/Grafana 建立阈值告警。
- 日志策略
- 调整 WebLogic 与应用的日志级别,避免 DEBUG 级别在高峰期输出过多;使用 logrotate 对 GC 与应用日志进行按日切分与压缩,防止磁盘被占满。
- 例行维护
- 保持 Debian、JDK、WebLogic 的安全与稳定更新;对长生命周期进程制定 滚动重启/维护窗口,释放累积资源;变更参数务必先在 测试环境验证 再上线。
五 快速检查清单与示例配置
- 快速检查清单
- 系统:文件描述符 ≥ 65536;关键 TCP 参数已优化;禁用无用服务;监控与告警已就位。
- JVM:-Xms==-Xmx、启用 G1 GC、设置 Metaspace 上限、开启 GC 日志/JFR、禁用 System.gc()。
- WebLogic:线程池与队列健康、数据源连接池与超时合理、启用 Keep-Alive/NIO、SSL 优化、必要时上 集群。
- 示例启动参数(置于 setDomainEnv.sh 的 JAVA_OPTIONS 或等效位置)
- -Xms4g -Xmx4g
- -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45
- -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g
- -XX:+TieredCompilation -Xss256k
- -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/weblogic/gc.log
- -XX:+DisableExplicitGC
- 注:如启用 JFR,按需添加 -XX:+UnlockCommercialFeatures -XX:+FlightRecorder。