当WebLogic在CentOS系统中出现资源占用过高(CPU、内存、磁盘I/O等)时,需从系统层、JVM层、WebLogic配置层、应用层逐步排查优化,以下是具体步骤:
调整文件描述符限制
WebLogic处理高并发连接时,需增加系统允许的单个进程打开文件数。临时修改:ulimit -n 65535;永久修改:编辑/etc/security/limits.conf,添加* soft nofile 65535和* hard nofile 65535,保存后重启系统生效。
优化TCP/IP参数
修改/etc/sysctl.conf文件,添加以下参数以提升网络性能:
net.ipv4.tcp_tw_reuse = 1 # 允许TIME_WAIT套接字重用
net.ipv4.tcp_fin_timeout = 30 # TIME_WAIT状态超时时间(秒)
net.core.somaxconn = 1024 # 监听队列最大长度
net.ipv4.tcp_window_scaling = 1 # 启用TCP窗口缩放
执行sysctl -p使配置生效。
关闭非必要服务
停止并禁用不需要的系统服务(如firewalld、NetworkManager),减少系统资源消耗:
systemctl stop firewalld && systemctl disable firewalld
systemctl stop NetworkManager && systemctl disable NetworkManager
调整堆内存大小
根据服务器内存情况,合理设置JVM初始堆(-Xms)和最大堆(-Xmx),建议两者设置为相同值(避免堆内存动态调整带来的性能损耗)。例如:
export JAVA_OPTIONS="-Xms2048m -Xmx2048m"
避免堆内存过小导致频繁GC,或过大导致Full GC停顿时间过长。
选择合适的垃圾回收器
推荐使用G1垃圾回收器(适用于大内存、低延迟场景),添加参数:
export JAVA_OPTIONS="$JAVA_OPTIONS -XX:+UseG1GC"
若使用Java 7及以前版本,需调整永久代大小(-XX:PermSize=512m、-XX:MaxPermSize=512m);Java 8及以上版本无需此设置(改用元空间)。
开启OOM堆快照
在JVM启动参数中添加以下配置,当发生内存溢出时自动生成堆转储文件,便于后续分析:
export JAVA_OPTIONS="$JAVA_OPTIONS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdump.hprof"
优化线程池大小
登录WebLogic管理控制台,进入服务器→配置→线程池,调整Execute Queue的Max Threads(最大线程数)。建议根据服务器CPU核心数(如8核)和并发请求量设置,初始值可设为100-200,避免线程数过多导致CPU上下文切换开销。
优化连接池配置
进入服务器→配置→数据源,调整数据库连接池的Initial Capacity(初始容量)、Max Capacity(最大容量)。建议Max Capacity设置为50-200(根据数据库性能和应用需求),并开启Test Connections on Reserve(获取连接时测试有效性),避免无效连接占用资源。
启用本地I/O
在WebLogic配置文件(config.xml)中,启用本地I/O库以提升套接字复用效率:
<socket-muxer>native</socket-muxer>
分析内存泄漏
若存在内存泄漏(表现为堆内存持续增长、Full GC频繁),使用以下工具排查:
jmap -dump:format=b,file=/path/to/oom.hprof <pid>;优化代码逻辑
StringBuilder代替+);try-with-resources语法);使用缓存技术
对频繁访问的数据(如配置信息、热点数据)使用缓存(如Redis、Ehcache),减少数据库查询次数,降低数据库压力。
日常监控
使用top(查看CPU、内存占用)、vmstat(查看系统级资源使用)、iostat(查看磁盘I/O)等工具定期监控系统资源;通过WebLogic管理控制台的监控→性能模块,查看线程池、连接池、JVM内存等指标。
压力测试
使用JMeter、LoadRunner等工具进行压力测试,模拟高并发场景,验证优化效果,并根据测试结果进一步调整参数。
通过以上步骤,可有效降低WebLogic在CentOS系统中的资源占用,提升应用性能。需注意,优化过程需在测试环境中验证,避免直接应用于生产环境。