温馨提示×

centos weblogic资源占用高怎么办

小樊
56
2025-09-20 10:03:22
栏目: 智能运维

1. 监控系统资源使用情况
首先通过工具定位资源占用高的根源。使用top命令实时查看CPU、内存占用率(按M键按内存排序,P键按CPU排序),识别占用高的进程;vmstat 1 5监控系统整体状态(重点关注r列——运行队列长度、b列——阻塞进程数、free列——空闲内存、si/so列——磁盘交换情况);iostat -x 1分析磁盘I/O(关注%util——磁盘利用率、await——平均等待时间,若%util接近100%说明磁盘瓶颈);netstat -antp查看网络连接状态(统计ESTABLISHED连接数,判断是否因连接数过多导致资源占用高)。

2. 优化操作系统配置
调整内核参数提升系统资源利用率。编辑/etc/sysctl.conf文件,添加以下关键参数:

  • net.ipv4.tcp_tw_reuse = 1(允许重用TIME_WAIT状态的连接,减少TCP连接开销);
  • net.ipv4.tcp_fin_timeout = 30(缩短TIME_WAIT状态的超时时间,默认60秒);
  • vm.swappiness = 10(降低交换空间使用倾向,避免内存不足时频繁换页);
  • net.core.somaxconn = 8192(增加TCP连接队列长度,避免连接被拒绝)。
    修改后执行sysctl -p使配置生效。同时,调整文件描述符限制(避免并发连接过多导致无法创建新连接),编辑/etc/security/limits.conf添加:
    * soft nofile 65535(普通用户最大打开文件数软限制)、* hard nofile 65535(硬限制);编辑/etc/pam.d/login添加session required pam_limits.so,使限制生效。

3. 调整WebLogic配置

3.1 优化JVM参数

通过调整JVM内存分配和垃圾回收策略减少内存占用。编辑setDomainEnv.sh文件(位于DOMAIN_HOME/bin目录),修改JAVA_OPTIONS参数:

  • 设置初始堆内存(-Xms)和最大堆内存(-Xmx)为相同值(如-Xms4g -Xmx4g),避免堆内存动态扩展带来的性能损耗;
  • 根据Java版本选择垃圾回收器(Java 8及以前用-XX:PermSize=256m -XX:MaxPermSize=512m,Java 8以后用-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m);
  • 推荐使用G1垃圾回收器(-XX:+UseG1GC),适合大内存应用,能有效减少Full GC时间。
    示例配置:
    export JAVA_OPTIONS="-Xms4g -Xmx4g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"

3.2 优化线程池和连接池

  • 线程池:登录WebLogic控制台(http://ip:7001/console),导航至“环境→服务器→服务器名称→配置→线程池”,调整“最大线程数”(默认10个,可根据CPU核心数调整,如8核服务器设置为2*CPU核心数+1=17)和“最小线程数”(设置为最大线程数的1/4~1/2,如8个),避免线程数过少导致请求排队或过多导致CPU竞争。
  • 连接池:导航至“服务→数据源→数据源名称→配置→连接池”,调整“初始容量”(如10)、“最大容量”(如100,根据数据库承受能力设置)、“容量增量”(如5,避免频繁创建连接),并设置“连接超时时间”(如30s,及时释放闲置连接)。

4. 排查内存泄漏
若存在java.lang.OutOfMemoryError错误,需通过以下步骤排查:

  • 生成堆转储文件:在JAVA_OPTIONS中添加-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump.hprof,当内存溢出时自动生成堆转储文件;或使用jmap命令手动生成(jmap -dump:live,format=b,file=dump.hprof <pid><pid>为WebLogic进程ID)。
  • 分析堆转储文件:使用Eclipse MAT(Memory Analyzer Tool)打开dump.hprof,查看“支配树”“泄漏嫌疑”等报告,找出占用内存最多的对象(如缓存未清理、静态集合类无限增长)。
  • 代码审查:检查应用程序中是否存在未关闭的资源(如数据库连接、IO流)、缓存未设置过期时间、静态集合类长期持有对象引用等问题,修复内存泄漏点。

5. 优化应用程序性能

  • 减少数据库访问:优化SQL语句(添加索引、避免SELECT *)、使用连接池复用数据库连接、引入缓存(如Redis)缓存热点数据(如商品信息、用户会话),减少对数据库的直接访问。
  • 优化代码逻辑:避免在循环中创建大量临时对象(如字符串拼接用StringBuilder代替+)、减少不必要的对象克隆、使用对象池复用昂贵的对象(如数据库连接、线程)。
  • 调整日志级别:将WebLogic和应用日志级别从DEBUG调整为INFOWARN,避免过多的日志输出占用磁盘I/O和CPU资源(如log4j.logger.com.example=INFO)。

6. 硬件升级
若以上优化仍无法满足需求,考虑升级硬件:

  • 增加内存:根据应用内存使用情况,将内存从4G升级至8G、16G甚至更高(需确保操作系统和WebLogic支持大内存)。
  • 更换高性能CPU:选择多核心、高主频的CPU(如Intel Xeon Platinum系列),提升WebLogic处理并发请求的能力。
  • 使用SSD硬盘:将系统盘和数据盘更换为SSD(如NVMe SSD),提升磁盘I/O性能(如随机读写速度比机械硬盘快10倍以上)。

0