下面给你一套在 CentOS 上针对 WebLogic 的调优思路,从 操作系统 → JVM → WebLogic → 应用层 逐层说明,适合生产环境参考。
编辑 /etc/sysctl.conf 或 /etc/sysctl.d/weblogic.conf:
# 网络连接
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
# 队列
net.core.somaxconn = 4096
net.core.netdev_max_backlog = 8192
# 文件句柄
fs.file-max = 1000000
# 内存
vm.swappiness = 10
vm.overcommit_memory = 1
生效:
sysctl -p
WebLogic 并发高时容易报 too many open files
ulimit -n 65535
编辑 /etc/security/limits.conf:
weblogic soft nofile 65535
weblogic hard nofile 65535
weblogic soft nproc 65535
weblogic hard nproc 65535
确认 PAM:
grep pam_limits /etc/pam.d/login
systemctl disable firewalld
systemctl disable postfix
systemctl disable cups
(生产环境可按需保留防火墙)
WebLogic 本质是 Java 应用,JVM 调优优先于 WebLogic 参数
编辑:
$DOMAIN_HOME/bin/setDomainEnv.sh
示例(JDK 8 + 16G 内存):
export USER_MEM_ARGS="-Xms8g -Xmx8g
-XX:MetaspaceSize=512m
-XX:MaxMetaspaceSize=512m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:+ParallelRefProcEnabled
-XX:+DisableExplicitGC
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/data/logs/weblogic/heapdump
-Xloggc:/data/logs/weblogic/gc.log
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps"
建议:
-Xms = -Xmx(避免动态扩容)echo 2048 > /proc/sys/vm/nr_hugepages
并在 JVM 中:
-XX:+UseLargePages
使用 Work Manager
示例:
Min Threads: 8
Max Threads: 32
关键参数:
| 参数 | 建议 |
|---|---|
| Initial Capacity | 10 |
| Max Capacity | 50~200 |
| Statement Cache Size | 50~100 |
| Test Connections On Reserve | 关闭 |
| Inactive Connection Timeout | 300s |
Admin Console
→ Servers
→ Configuration
→ Tuning
不要直接暴露 WebLogic:
Nginx / Apache → WebLogic
好处:
jstack pid
jmap -heap pid
| 现象 | 原因 |
|---|---|
| CPU 100% | GC 频繁 / 死循环 |
| 响应慢 | 线程池满 / DB 慢 |
| OOM | 内存过小 / 内存泄漏 |
OS: CentOS 7/8
JVM: JDK 8 + G1GC
Xms/Xmx: 8G
线程池: 8~32
数据源: 50~100
文件句柄: 65535
如果你愿意,可以告诉我:
我可以给你一套更精确的调优参数模板。