WebLogic资源占用高(如CPU、内存、线程阻塞、连接数不足)通常与JVM配置、线程池/连接池设置、操作系统参数、应用代码或数据库交互相关。以下是针对性的解决步骤:
在调优前,需通过工具明确资源瓶颈所在:
top命令查看WebLogic进程的CPU使用率,结合jstack <pid>生成线程转储,分析是否有线程长时间处于RUNNABLE状态(如死循环、同步锁等待);jstat -gcutil <pid> 1000 5监控堆内存使用情况(重点关注O区(老年代)占用率),若O区持续接近100%且伴随Full GC频繁,可能存在内存泄漏;jstack <pid>查看线程状态,若有大量线程处于WAITING或BLOCKED状态(如等待数据库连接、锁资源),需优化线程池或数据库交互;Services → Data Sources中的连接池Active Connections,若接近Max Capacity,说明连接池配置不足。内存溢出(OutOfMemoryError)是WebLogic资源占用的常见原因,需合理调整JVM参数:
setDomainEnv.sh(Linux)或setDomainEnv.cmd(Windows)中,修改WLS_MEM_ARGS参数(如-Xms4096m -Xmx4096m),建议最大内存不超过物理内存的50%~60%(避免占用过多物理内存导致系统交换);-XX:MaxPermSize=512m(解决类加载器泄漏导致的永久代溢出);Java 8及以上无需此参数(元空间默认使用本地内存,但可通过-XX:MaxMetaspaceSize限制);-XX:+UseG1GC),通过-XX:MaxGCPauseMillis设置最大停顿时间(如200ms),平衡吞吐量与延迟;-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump.hprof,当发生OutOfMemoryError时自动生成堆转储文件,便于后续用MAT(Memory Analyzer Tool)分析泄漏点。线程池大小直接影响WebLogic处理并发请求的能力,需根据CPU核心数和应用负载调整:
config.xml;若需手动调整,在控制台Servers → [Your Server] → Configuration → General → Advanced中,修改Execute Queue的Thread Count(建议值为CPU核心数×50,如4核CPU设置为200);Servers → [Your Server] → Configuration → Services → Messaging → Default Queue),调整Thread Count和Max Threads,避免默认线程池过载。连接池配置不当会导致数据库连接泄漏或资源浪费,需合理设置:
Services → Data Sources → [Your DataSource] → Configuration → Connection Pool中,设置Initial Capacity(初始连接数)与Max Capacity(最大连接数)一致(如50),避免运行时动态扩容的开销;Inactive Connection Timeout(如300秒),回收闲置连接;设置Connection Reserve Timeout(如60秒),避免线程长时间等待连接;Connection Pool中开启PreparedStatement Cache Size(如100),减少SQL语句重复编译的开销;Logging Last Resource(Configuration → Transactions),减少XA协议的开销(提升20%~30%的事务性能)。操作系统参数限制会影响WebLogic的资源利用效率,需调整:
/etc/security/limits.conf,添加* soft nofile 65535和* hard nofile 65535(允许单个用户最多打开65535个文件描述符,解决“Too many open files”问题);/etc/sysctl.conf,添加net.ipv4.tcp_tw_reuse = 1(复用TIME_WAIT状态的连接)、net.ipv4.tcp_fin_timeout = 30(缩短TIME_WAIT状态的超时时间)、net.core.somaxconn = 65535(增加TCP连接队列长度),执行sysctl -p使配置生效;/etc/security/limits.conf中添加* soft nproc 65535和* hard nproc 65535(允许单个用户最多创建65535个进程)。System.out.println,使用异步日志框架如Log4j2)、优化代码逻辑(避免在循环中创建大量对象)、启用缓存(如Ehcache、Redis)减少重复计算;SELECT *、使用索引)、定期执行ANALYZE TABLE更新表统计信息、分离读写操作(使用主从复制,将读请求分发到从库)。Monitoring → Performance查看线程池、连接池、JVM内存的使用情况;通过以上步骤,可系统性解决WebLogic在CentOS上的资源占用高问题。需注意,调优需结合实际业务负载和环境,避免盲目调整参数(如过度增大线程池可能导致CPU竞争加剧)。