WebLogic在Ubuntu上的性能优化技巧
vm.swappiness(减少交换空间依赖,建议设为10)、vm.dirty_ratio(控制脏数据写回阈值,建议设为100),通过sysctl命令修改并写入/etc/sysctl.conf使其永久生效;增加用户进程数和文件描述符限制(编辑/etc/security/limits.conf,设置* soft nofile 65535、* hard nofile 65535等),避免高并发下进程或文件句柄耗尽。noatime(减少文件访问时间更新)、nodiratime(减少目录访问时间更新)等选项,提升文件读写性能。nice(启动时降低进程优先级)或renice(运行时调整进程优先级)命令,避免WebLogic进程占用过多CPU资源,确保系统关键进程(如系统守护进程)优先执行。setDomainEnv.sh(域环境脚本)或启动脚本(如startWebLogic.sh),调整-Xms(初始堆大小)和-Xmx(最大堆大小)参数,建议两者设为一致(如4G),避免堆内存频繁扩容带来的性能损耗;对于64位系统,最大堆内存不宜超过物理内存的50%-60%(一般不超过8G)。-XX:MetaspaceSize(初始元空间大小)和-XX:MaxMetaspaceSize(最大元空间大小),避免元空间溢出(默认无限制可能导致性能下降);Java 7及以下版本则调整-XX:PermSize和-XX:MaxPermSize(如128M/256M)。-XX:+UseG1GC参数启用,并配合-XX:MaxGCPauseMillis(目标最大GC停顿时间,如200ms)调整GC策略,减少GC对应用的影响。Servers→选择服务器→Configuration→General→Advanced Options→Configure Execute Queues)修改weblogic.kernel.Default队列的Thread Count(线程数),建议设置为CPU核心数×50(如4核CPU设为200);若使用WebLogic 9及以上版本,可开启自调优功能(通过config.xml设置self-tuning-thread-pool-size-min和self-tuning-thread-pool-size-max),让系统根据负载动态调整线程数。Thread Count Increase(线程数增加量,如50)和Max Thread Count(最大线程数,如500),当队列等待请求数超过Queue Length Threshold Percent(队列长度阈值百分比,如75%)时,自动增加线程数,避免请求被拒绝;但需注意,最大线程数不宜过大,防止线程切换开销过高。Services→Data Sources→选择数据源→Configuration→Connection Pool)设置Initial Capacity(初始连接数)和Max Capacity(最大连接数),建议两者设为一致(如25),避免运行时频繁创建/销毁连接的开销;对于高并发应用,可适当增加Max Capacity(如100),但需确保数据库能承受相应连接数。Statement Cache Size(预编译语句缓存大小,如100),将常用SQL语句编译后缓存起来,避免重复解析,提升数据库访问性能。Test Connections on Reserve(获取连接时测试有效性)和Seconds to Trust an Idle Pool Connection(空闲连接信任时间,如30),及时发现并回收泄漏的数据库连接,避免连接池耗尽。config.xml中服务器实例的AcceptBacklog参数(默认50),建议增加至CPU核心数×25(如100),提升TCP连接请求的接受能力,避免高并发下出现“连接拒绝”错误;通过控制台(Servers→选择服务器→Configuration→Tuning)即可修改。Servers→选择服务器→Configuration→Tuning)勾选Enable Native IO,让本地Socket读写使用独立执行队列,减少默认执行队列的线程占用,提升IO密集型应用的性能。Chunk Size(chunk大小,默认8K),减少网络传输次数,提升数据传输效率;可通过setDomainEnv.sh添加-Dweblogic.ChunkSize=32768(32K)参数设置。Optimistic Concurrency(乐观并发)或ReadOnly(只读)并发策略,结合缓存-between-transactions(事务间缓存)或query-caching(查询缓存),减少数据库访问次数;对于BMP(Bean管理持久化)EJB,优化ejbLoad和ejbStore方法的实现,避免不必要的数据库操作。local-interfaces(本地接口)或开启call-by-reference(call-by-reference语义,默认8.1及以上版本关闭),避免对象序列化开销,提升调用性能。Session Timeout(会话超时时间,如30分钟),使用分布式会话缓存(如Redis)存储会话数据,提升会话访问效率;通过控制台(Servers→选择服务器→Configuration→Session)调整会话参数。Servers→选择服务器→Monitoring→Performance)监控JVM内存使用率、线程池状态、数据库连接池状态、请求队列长度等指标,及时发现性能瓶颈;启用JMX(Java Management Extensions),通过JConsole、VisualVM等工具实时监控WebLogic实例的性能。System.out.println、DEBUG级别日志),使用异步日志框架(如Log4j2)减少日志写入对性能的影响;定期清理日志文件,避免日志占用过多磁盘空间。