WebLogic Server 关键优化指标

昨天给客户做巡检,又将整个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

目前WebLogic Server采用自优化的策略来进行线程的自动扩展,一般状况下不需要对线程进行专门的优化,如果在压力测试环境中有必要,可以设置最小线程数和最多线程数,具体设置方法如下:
修改weblogic\user_projects\domains\base_domain\bin下的setDomainEnv.sh中在JAVA_OPTIONS中添加如下:

JAVA_OPTIONS="${JAVA_OPTIONS} -Dweblogic.threadpool.MinPoolSize=100 -Dweblogic.threadpool.MaxPoolSize=1000"

 

export JAVA_OPTIONS

  

一般线程数建议设置成100-500之间,线程太多容易引起进程内部的线程切换.

 

3.Accept BackLog

WebLogic 使用Accept Backlog (TCP queue)参数规定WebLogic向系统请求的queue的大小, Accept Backlog属性決定了在 waiting queue(listening queue)中最多可以有多少TCP连接等待处理,預设值爲300
如果在許多client连接被拒絕,而在服务器端沒有错误显示,说明该值设得过低
如果连接时收到了”connection refused”消息,可以适当增大weblogic.system.acceptBacklog的值,每次增加25% ,配置如下:

服务器->配置->优化->接受积压

 

4.Muxer优化

Muxer定位:在前端接入请求,然后转交执行队列

WebLogic Server采用3种Muxer机制
  • Java Muxer
  • Native Muxer
  • Non-Blocking IO Muxer
始终验证 WebLogic 正在使用 NativeIO。以下消息指示其正在使用中
<Aug 7, 2012 8:32:10 AM CDT> <Info> <Socket> <BEA-000446> <Native IO Enabled.>
从 32 位 JVM 切换至 64 位 JVM 时需格外注意。32 位 WebLogic Server 下载文件不含套接字合成器所需的 64 位本地库。

如果无法使用NativeIO(或者不沟取),Java Muxer设置缺省33%,最高50%,这都是指的占用线程的比例关系,
也可以设置合成器线程数量限制:  -Dweblogic.SocketReaders=4
 
传统方式下只有一个Muxer,Non-Blocking IO Muxer是在Exalogic上采用,缺省会启动3个Muxer.
 

 5.JDBC优化

 

创建 DB 连接是一个非常耗时的过程
  • 理想情况下,设置为最小值 = 最大值,以避免按需创建连接
  • 如果 DB 连接数受限,请将最小值设置为处理普通负载所需的连接数,将最大值设置为处理峰值负载所需的连接数,并启用池收缩
在控制台中监视数据源统计数据
  • Active Connections High Count
  • Waiting on Connection High Count
  • Wait Seconds High Count

缓存主要设置语句的条数,缺省为10,建议调大,设置成300

 

Connection Creation Retry Seconds(默认值 = 0)
  • 如果某数据源的数据库不可用,那么此选项设置为默认值 0 时 WLS 将无法启动!
  • 设置为非零值可让服务器顺利启动并定期重试创建连接池
Seconds to Trust Idle Pool Connection(默认值 = 10 秒)
  • 与 Test Connections On Reserve 共同发挥作用
  • 可显著减少连接测试查询
请考虑 LLR for JTA 事务
  • 仅有利于涉及多种资源的 XA 事务
  • Last Logging Resource(非 XA)必须是数据库
 
posted @ 2016-03-02 09:33  ericnie  阅读(7238)  评论(0编辑  收藏  举报