Ubuntu上WebLogic性能优化技巧
调整Ubuntu内核参数以提升系统资源利用率。修改/etc/sysctl.conf文件,关键参数包括:
vm.swappiness=10(值越低,系统越倾向于保留物理内存,减少交换分区使用);net.ipv4.tcp_tw_reuse=1(允许复用处于TIME_WAIT状态的连接,降低连接建立开销);fs.file-max=65536(提升系统能同时打开的文件数,满足高并发请求)。sysctl -p使配置生效。noop调度器,低延迟应用适合deadline调度器),通过cat /sys/block/sda/queue/scheduler查看当前调度器,修改/etc/default/grub中的GRUB_CMDLINE_LINUX参数并更新grub。/etc/default/grub,添加default_hugepagesz=2M hugepagesz=2M hugepages=1024(根据服务器内存调整,如16GB内存可设为8192),更新grub并重启;zram或zswap将闲置内存页压缩存储,释放物理内存给活跃进程(如sudo modprobe zram,然后配置/etc/default/zramswap调整压缩块大小)。线程池大小直接决定并发处理能力。通过WebLogic管理控制台或配置文件调整:
Servers > [Server Name] > Configuration > Tuning,调整Execute Queue的Thread Count(建议值为CPU核心数的2-5倍,如4核CPU设为8-20);config.xml中的<self-tuning-thread-pool-size-min>和<self-tuning-thread-pool-size-max>(如均设为200),启用自适应线程池(默认开启),可根据负载动态调整线程数。合理配置JDBC连接池,避免数据库成为瓶颈:
Initial Capacity(初始连接数,建议5-10)、Max Capacity(最大连接数,建议20-50,不超过数据库最大连接数)、Statement Cache Size(语句缓存,建议10-20,减少SQL解析开销)、Inactive Connection Timeout(非活动连接超时,建议30-60秒,释放闲置连接);Test Connections On Reserve(从池中获取连接时测试有效性,避免无效连接)、Seconds to Trust an Idle Pool Connection(闲置连接信任时间,建议5-10秒,减少频繁测试开销)。优化JVM内存分配,减少垃圾回收(GC)停顿时间:
-Xms(初始堆大小)和-Xmx(最大堆大小)为相同值(如-Xms2048m -Xmx2048m),避免堆内存动态扩展带来的性能波动;-XX:NewRatio=2(新生代占堆的1/3,老年代占2/3,适合大多数应用);-XX:+UseG1GC),降低Full GC停顿时间(适用于大内存应用);-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m(避免元空间溢出)。启用NativeIO提升网络通信效率:在WebLogic启动脚本(如setDomainEnv.sh)中添加-Dweblogic.NativeIOEnabled=true,或在config.xml中配置<native-io-enabled>true</native-io-enabled>(默认开启)。NativeIO绕过JVM的ByteBuffer机制,直接调用操作系统原生I/O接口,提升高并发下的网络吞吐量。
Servlet Reload Check Secs为-1(禁用自动重新加载),避免每次修改Servlet后WebLogic重新编译,减少资源消耗;Single Threaded Servlet Buffer Pool Size为5(默认值),优化单线程Servlet的缓冲处理,提升响应速度。使用工具实时监控系统资源使用情况:
top/htop:查看CPU、内存、进程状态;vmstat 1:监控CPU、内存、I/O的实时统计(如si/so列显示交换分区使用情况,us/sy列显示CPU使用率);iotop:监控磁盘I/O,识别高I/O进程。通过WebLogic Admin Console的Performance Monitoring模块,监控以下指标:
Execute Thread Total CPU Time(线程CPU使用时间)、Pending User Request Count(待处理请求数,若持续大于0,需增加线程数);Connection Usage(连接使用率,若接近100%,需增加最大连接数)、Wait Time(等待时间,若过长,需优化连接池配置);Heap Memory Usage(堆内存使用率,若频繁Full GC,需调整堆大小或GC策略)。定期分析WebLogic日志(如server.log),定位性能瓶颈:
SELECT语句执行时间过长的记录(可通过数据库慢查询日志配合分析);Thread blocked相关日志,分析线程等待的资源(如锁、连接);OutOfMemoryError、StackOverflowError等异常,针对性解决(如增加堆内存、优化递归调用)。