1. 堆内存分配(核心参数)
设置-Xms(初始堆大小)与-Xmx(最大堆大小)为相同值(如-Xms4g -Xmx4g),避免堆内存动态调整带来的性能开销。建议值为物理内存的50%-70%(不超过8G),例如CentOS服务器物理内存为16G时,可设置为-Xms8g -Xmx8g。
2. 元空间配置(Java 8+必备)
Java 8及以上版本需用**元空间(Metaspace)**替代永久代,设置-XX:MetaspaceSize(初始大小,如256m)和-XX:MaxMetaspaceSize(最大大小,如512m),避免元空间溢出(常见错误:java.lang.OutOfMemoryError: Metaspace)。
3. 新生代与老年代比例
通过-XX:NewRatio调整新生代(Young Generation)与老年代(Old Generation)的比例(如-XX:NewRatio=2表示新生代占堆的1/3)。若应用存在大量短期对象(如Web应用),可适当增大新生代比例(如-XX:NewRatio=1)。
4. Survivor区配置
用-XX:SurvivorRatio设置Eden区与单个Survivor区的比例(如-XX:SurvivorRatio=8表示Eden区占新生代的8/10,每个Survivor区占1/10)。默认值(8)适用于多数场景,若对象晋升老年代过快,可适当增大该值。
推荐使用G1GC(Garbage-First Garbage Collector)
G1GC适用于大内存(≥4G)、多处理器服务器,通过将堆划分为多个Region实现并行回收,减少Full GC停顿时间。启用参数:-XX:+UseG1GC。
可选优化参数:
-XX:MaxGCPauseMillis=200:设置最大GC停顿时间目标(默认200ms,可根据应用延迟要求调整);-XX:G1HeapRegionSize=4m:设置Region大小(默认自动计算,可根据堆大小调整,如4m、8m)。1. 文件描述符限制
WebLogic处理高并发连接时需大量文件描述符,需调整系统限制:
ulimit -n 65535;/etc/security/limits.conf,添加* soft nofile 65535、* hard nofile 65535。2. TCP/IP参数优化
修改/etc/sysctl.conf,提升网络性能:
net.ipv4.tcp_tw_reuse=1:允许复用TIME_WAIT状态的连接(减少连接建立开销);net.ipv4.tcp_fin_timeout=30:设置TIME_WAIT状态的超时时间为30秒(默认60秒);net.core.somaxconn=1024:增加TCP连接队列长度(避免连接拒绝)。sysctl -p使配置生效。1. 线程池调优
根据CPU核心数调整线程池大小(推荐CPU核心数×50),避免线程过多导致上下文切换开销或过少导致请求排队:
编辑setDomainEnv.sh,添加:
JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.threadpool.MinPoolSize=500 -Dweblogic.threadpool.MaxPoolSize=3000"
或在WebLogic控制台→配置→线程池中修改。
2. 连接池优化
设置连接池InitialCapacity(初始容量)与MaxCapacity(最大容量)相同(如InitialCapacity=50、MaxCapacity=200),避免运行时动态扩容的开销。通过WebLogic控制台→服务→数据源→高级选项调整。
3. 启用本地I/O
在WebLogic控制台→配置→优化中,勾选“Enable Native IO”(启用本地I/O),提升套接字复用效率,减少线程阻塞。
1. 使用监控工具
jstat -gcutil <pid>(查看GC统计信息)、jconsole(图形化监控内存、线程)、VisualVM(综合监控);2. 日志与分析
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/path/to/gc.log,分析Full GC频率、停顿时间;jmap -dump:format=b,file=heap.hprof <pid>导出堆转储,通过Eclipse MAT等工具分析内存占用。