Ubuntu上WebLogic内存管理优化指南
合理设置JVM堆内存是WebLogic内存管理的核心。需根据服务器物理内存和应用负载调整以下参数(以setDomainEnv.sh文件为核心修改位置):
-XX:MetaspaceSize=256m(初始大小)、-XX:MaxMetaspaceSize=512m(最大大小),避免元空间溢出(常见于动态类加载较多的应用)。setDomainEnv.sh中通过MEM_ARGS变量配置,例如:export MEM_ARGS="-Xms1024m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"。swappiness控制内核使用交换分区(Swap)的倾向,值越高越易将内存数据换出到磁盘(导致性能下降)。Ubuntu默认值为60,建议修改为10(降低Swap使用率):
sudo sysctl -w vm.swappiness=10
# 永久生效:编辑/etc/sysctl.conf,添加vm.swappiness=10
```。
#### **2. 优化内核内存管理**
- **增大最大文件描述符数量**:WebLogic处理高并发请求时,需足够文件描述符。修改`/etc/security/limits.conf`,添加:
`* soft nofile 65535`
`* hard nofile 65535`
同时在`/etc/pam.d/common-session`和`/etc/pam.d/common-session-noninteractive`中添加`session required pam_limits.so`,使设置生效。
- **调整TCP参数**:优化网络栈性能,编辑`/etc/sysctl.conf`,添加:
`net.core.somaxconn=4096`(监听端口最大连接队列长度)
`net.ipv4.tcp_tw_reuse=1`(复用TIME-WAIT状态的连接,减少资源占用)。
### **三、WebLogic自身内存优化**
#### **1. 线程池配置**
线程池大小直接影响并发处理能力,需根据CPU核心数调整:
- 每个CPU核心建议分配**25-50个线程**(如4核CPU可设为100-200)。
- 修改路径:WebLogic控制台→环境→服务器→选择服务器→配置→线程池→调整“线程数”(Thread Count)。
#### **2. 数据库连接池优化**
连接池配置需匹配数据库最大连接数,避免资源浪费:
- **初始容量**:设置为应用高峰期最小并发连接数(如20)。
- **最大容量**:不超过数据库最大连接数的80%(如数据库最大连接数为100,可设为80)。
- **容量增长**:每次增加5个连接(如`Capacity Increment=5`)。
修改路径:WebLogic控制台→服务→数据源→选择数据源→配置→连接池。
### **四、内存泄漏排查与监控**
#### **1. 排查内存泄漏**
- **获取进程ID**:`ps -ef | grep weblogic`(找到WebLogic主进程ID)。
- **查看堆内存使用**:`jstat -gcutil <pid>`(监控堆内存各区域使用率,重点关注Old区占比)。
- **开启堆转储**:在WebLogic启动脚本(如`setDomainEnv.sh`)中添加:
`-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdump.hprof`(内存溢出时自动生成堆转储文件)。
- **分析堆转储**:使用Eclipse MAT(Memory Analyzer Tool)打开`.hprof`文件,找出占用内存大的对象(如未释放的集合、缓存)。
#### **2. 持续监控内存**
- **内置工具**:通过WebLogic控制台→监控→服务器→内存使用率,实时查看堆内存、非堆内存使用情况。
- **第三方工具**:使用Prometheus+Grafana构建可视化监控体系,监控JVM内存、GC频率等指标,及时预警内存瓶颈。
### **五、其他优化技巧**
- **启用大页内存(Huge Pages)**:针对使用大量内存的应用(如数据库、WebLogic集群),启用大页内存可减少内存页表开销。编辑`/etc/default/grub`,添加`transparent_hugepage=never`,然后更新GRUB并重启服务器。
- **压缩闲置内存**:使用`zram`或`zswap`技术,将闲置内存页压缩存储(减少Swap使用),提升内存利用率。例如,安装`zram-config`包(Ubuntu默认仓库),自动配置zram设备。