昨天给客户作巡检,又将整个WebLogic Server的优化过程走了一遍,记录下来给你们参考。前端
1.JVM优化java
查看web
$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 的频率
- JVM 内存占用不该超过物理内存
- 最大达到 RAM 的 80-90%(为操做系统留出空间)
- 经验法则:应尽可能增长年轻代收回的对象。尽可能增长完整 GC 频繁
- Set –Xmx = –Xms
- 防止堆大小 (Full GC) 从 Xms 增大到 Xmx
- 性能更优
- 并不是老是生产可用性的最佳选择(OOME 更合适使用内存交换)
- 持久代大小
- -XX:PermSize = -XX:MaxPermSize
- 持久代占用空间大小难以预测
- 设置足够高以防止 PermGen OOME
- 将 -XX:NewSize 设置为 -XX:MaxNewSize
设置dom
通常来讲在64位系统中开到4G-8G,若是有多租户的规划,能够开到更大,修改setDomainEnv.shjvm
也能够根据受管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)必须是数据库