CentOS环境下WebLogic性能调优实践
首先通过top、vmstat、iostat等工具监控系统资源使用情况,明确瓶颈所在(如CPU过载、内存不足、磁盘I/O延迟)。根据应用负载需求扩展硬件:增加CPU核心数(针对多线程应用)、提升内存容量(减少Swap使用)、更换高性能SSD(提升磁盘I/O)、使用千兆/万兆网卡(增强网络传输能力)。对于多核服务器,可通过numactl命令绑定WebLogic进程到特定NUMA节点,优化内存访问效率。
编辑/etc/sysctl.conf文件调整内核参数,提升系统性能:
vm.swappiness=10(降低系统对Swap的依赖,优先使用物理内存);vm.dirty_ratio=10(当脏数据占比达到10%时触发写回,平衡内存与I/O负载)。net.ipv4.tcp_tw_reuse=1(允许重用TIME_WAIT状态的连接,减少连接建立开销);net.ipv4.tcp_fin_timeout=30(缩短FIN_WAIT_2状态的超时时间,释放资源);net.core.rmem_max=16777216、net.core.wmem_max=16777216(增大TCP接收/发送缓冲区,提升网络吞吐量)。
修改后执行sysctl -p使配置生效。noatime选项(减少文件访问时间更新,降低磁盘I/O)。ulimit -n 65535临时修改,或编辑/etc/security/limits.conf文件永久设置(如* soft nofile 65535、* hard nofile 65535),避免高并发场景下文件描述符耗尽。通过systemctl list-unit-files --type=service查看系统服务,关闭不需要的服务(如postfix(邮件服务)、firewalld(防火墙,若用其他安全组件替代)、NetworkManager(网络管理,若用传统网络配置)),释放系统资源。
除上述内核参数外,还可调整以下参数提升网络性能:
net.ipv4.tcp_max_syn_backlog=8192(增大SYN队列长度,应对高并发连接请求);net.ipv4.tcp_keepalive_time=600(缩短TCP保活时间,及时释放无效连接)。JVM内存设置是性能调优的核心,需根据应用类型(如Java EE应用、大数据应用)调整:
-Xms)与最大堆大小(-Xmx)设置为相同值(如-Xms2048m -Xmx2048m),避免堆内存动态扩展带来的性能开销。建议堆内存占物理内存的50%-70%(不超过80%)。-XX:PermSize=512m -XX:MaxPermSize=512m(永久代用于存储类元数据);Java 8及以上版本需设置-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m(元空间替代永久代,存储类元数据,且默认无大小限制,但需避免内存泄漏)。-XX:+UseG1GC),适用于大内存、低延迟场景,可通过-XX:MaxGCPauseMillis=200设置最大GC停顿时间(如200毫秒),平衡吞吐量与延迟。
修改方法:通过setDomainEnv.sh(域环境配置文件)或WebLogic控制台(“服务器→配置→服务器启动”)设置。线程池大小直接影响应用并发处理能力,需根据任务类型调整:
MinPoolSize)和“最大线程数”(MaxPoolSize)。config.xml文件,在<server>标签内添加<self-tuning-thread-pool-size-min>100</self-tuning-thread-pool-size-min>、<self-tuning-thread-pool-size-max>200</self-tuning-thread-pool-size-max>(自调优线程池范围)。setDomainEnv.sh,添加-Dweblogic.threadpool.MinPoolSize=100 -Dweblogic.threadpool.MaxPoolSize=200。数据库连接池是应用与数据库交互的关键,需合理配置:
test-on-borrow=true(从连接池获取连接时检查有效性)、validation-query=SELECT 1(验证连接的SQL语句)、max-wait=5000(获取连接的最大等待时间,单位毫秒)、inactive-timeout=300(非活动连接超时时间,单位秒,释放闲置连接)。
调整方法:通过WebLogic控制台(“服务→数据源→选择数据源→配置→连接池”)或config.xml文件修改。WebLogic 10.x及以上版本支持自调优线程池(Self-Tuning Thread Pool),可根据负载动态调整线程数,提升资源利用率。默认启用,若需确认,编辑config.xml文件,确保<server>标签内包含<use81-style-execute-queues>false</use81-style-execute-queues>(默认值,表示使用自调优线程池)。
开发模式与生产模式的默认参数差异较大,需将服务器切换至生产模式(config/config.xml中<name>production-mode-enabled</name>设置为true),生产模式的线程数、连接池大小等参数更符合高负载需求。
关闭不必要的日志输出(如DEBUG级别),避免频繁的I/O操作。可通过修改log4j.properties(Log4j)或logging.properties(JDK Logging)文件,将日志级别调整为INFO或WARN;减少System.out.println语句的使用(同步输出,影响性能)。
<% %>),减少JSP编译次数;设置<%@ page isThreadSafe="true" %>(线程安全,提升并发处理能力)。@Async注解)或消息队列(如RabbitMQ、Kafka)处理耗时任务,避免阻塞线程。WLST(WebLogic Scripting Tool)编写脚本自动化监控(如定期获取线程池活跃线程数)。top、vmstat、iostat等命令行工具监控系统资源。任何调优操作前,需在测试环境使用压力测试工具(如Apache JMeter、LoadRunner)模拟真实负载,验证调优效果。例如,调整线程池大小后,通过JMeter发起1000并发请求,观察响应时间(如从2s缩短至500ms)、CPU使用率(如从80%降至60%)、线程池活跃线程数(如稳定在150左右,未超过最大线程数)等指标,确保调优达到预期效果且不影响系统稳定性。