昨天给客户做巡检,又将整个WebLogic Server的优化过程走了一遍,记录下来给大家参考。
1.JVM优化
查看
$ps –ef | grep java /opt/java1.5/bin/java -server -Xms256m -Xmx512m -XX:PermSize=16M -XX:NewSize=128m -XX:MaxPermSize=256m … |
参数设置原则
- 保持简单性
- 提供基本参数(-X 参数)-Xms、-Xmx、-Xmn
- 选择一个 GC/性能优先级,权衡吞吐量与暂停时间
- 其余参数大多使用默认值,(让人体工程机制计算正确值,仅当默认值无效时调优)
- 年轻代的大小将决定
- 次要 GC 的频率
- 次要 GC 收回的对象数量
- 年老代大小
- 应达到应用程序稳定状态的 实时数据大小
- 尝试最大限度减小主要 GC 的频率
- JVM 内存占用不应超过物理内存
- 最大达到 RAM 的 80-90%(为操作系统留出空间)
- 经验法则:应尽量增加年轻代收回的对象。尽量增加完整 GC 频繁
- Set –Xmx = –Xms
- 防止堆大小 (Full GC) 从 Xms 增大到 Xmx
- 性能更优
- 并非总是生产可用性的最佳选择(OOME 更合适使用内存交换)
- 持久代大小
- -XX:PermSize = -XX:MaxPermSize
- 持久代占用空间大小难以预测
- 设置足够高以防止 PermGen OOME
- 将 -XX:NewSize 设置为 -XX:MaxNewSize
- 优先使用 –Xmn
设置
一般来说在64位系统中开到4G-8G,如果有多租户的规划,可以开到更大,修改setDomainEnv.sh
也可以根据受管Server的名字设置不同的JVM,具体设置在USER_MEM_ARGS参数前
############# change jvm ######################### if [ "${SERVER_NAME}" = "" ] ; then SERVER_NAME="AdminServer" export SERVER_NAME fi if [ "${SERVER_NAME}" = "AdminServer" ] ; then USER_MEM_ARGS="-Xms512m -Xmx1024m -XX:MaxPermSize=512m" else USER_MEM_ARGS="-Xms4g -Xmx4g -XX:MaxPermSize=1024m" fi
############# e n d ######################### |
JVM GC文件输出设置
如果需要分析JVM GC日志,需要在启动时加入参数
Sun:-verbose:gc -XX:+PrintGCDetails -Xloggc:<filename> IBM:-Xverbosegc:file=filename 或 -Xverbosegclog:filename HP :-Xverbosegc=filename Oracle JRockit:-Xverbose:memory -XverboseLog:filename |
随后可以通过GCViewer进行脱机的日志查看。
2.关于线程
WebLogic Server在9以后引入了work manager机制,因此weblogic会自动对线程的数目进行优化,开发模式下初始线程数为15,生产模式下初始线程数为25
JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.threadpool.MinPoolSize=100 -Dweblogic.threadpool.MaxPoolSize=1000"
export JAVA_OPTIONS |
一般线程数建议设置成100-500之间,线程太多容易引起进程内部的线程切换.
3.Accept BackLog
服务器->配置->优化->接受积压:
4.Muxer优化
Muxer定位:在前端接入请求,然后转交执行队列
- Java Muxer
- Native Muxer
- Non-Blocking IO Muxer
5.JDBC优化
- 理想情况下,设置为最小值 = 最大值,以避免按需创建连接
- 如果 DB 连接数受限,请将最小值设置为处理普通负载所需的连接数,将最大值设置为处理峰值负载所需的连接数,并启用池收缩
- Active Connections High Count
- Waiting on Connection High Count
- Wait Seconds High Count
缓存主要设置语句的条数,缺省为10,建议调大,设置成300
- 如果某数据源的数据库不可用,那么此选项设置为默认值 0 时 WLS 将无法启动!
- 设置为非零值可让服务器顺利启动并定期重试创建连接池
- 与 Test Connections On Reserve 共同发挥作用
- 可显著减少连接测试查询
- 仅有利于涉及多种资源的 XA 事务
- Last Logging Resource(非 XA)必须是数据库