性能调优手册
# JDK优化
# JDK选择
AESB每个版本都有默认的出厂JDK配置说明,这是产品开发和测试使用的JDK版本,经过了充分的测试。但根据实际情况(如JDK造成的BUG,或性能等问题)也可选择其他的配置替代。
因为JDK版本向下兼容,所以尽量选择比推荐配置高版本的JDK,但大版本不一致需验证。可选择第三方JDK(如JRockit,IBM JDK等等),不同JDK有一些不同的特性,在一些特定场景下,性能会有提升。
默认32位JDK对内存支持有限,如需使用更大的内存,可选择64位的JDK。
# 参数调整
AESB 的参数调整需修改%AESB_MANAGER_HOME%/bin、%AESB_LB_HOME%/bin和%AESB_RUNTIME_HOME% /bin目录下的startesb.cmd(Windows)或者startesb(Linux)文件中的JVM_OPTS变量。
JVM参 数调整可参考官方参数说明文档:[http://www.oracle.com/technetwork/java/javase/tech /vmoptions-jsp-140102.html](http://www.oracle.com/technetwork/java/javase/tech /vmoptions-jsp-140102.html)(中文版本:[http://kenwublog.com/docs/java6-jvm- options-chinese-edition.htm](http://kenwublog.com/docs/java6-jvm- options-chinese-edition.htm))
常用的参数调整主要涉及内存大小调整和GC策略调整:
内存调整除 了最常见的 -Xms、-Xmx 外还包含了对
-XX:NewSize、-XX:MaxNewSize、-XX:SurvivorRatio、-Xss等参数的调整,内存参数的调整是一个测试调整再测试的一个持续的优化的过程,因为运行行为以及机器环境的不同,没有通用的参数有四种 GC 策略
-XX:-UseConcMarkSweepGC、-XX:-UseParallelGC、-XX:-UseParallelOldGC、-XX:-UseSerialGC可根据情况调整,其中-XX:-UseConcMarkSweepGC可降低大并发时用户的停顿。
# AESB调优
# 流程调优
流程的全局配置
- 配置集群属性为“负载均衡”,可让同一个流程运行在多个运行服务器上,从而提高性能(流程是否能配置为负载均衡需根据流程特性决定,如文件监控就不适合配置为负载均衡)。
- 全局事务在高并发情况下性能影响明显,如果流程本身无事务相关操作(主要还是数据库和MQ),可选择关闭事务。
- 流程实例数即执行此流程的最大线程数量,增大此数值可大大提高高并发时流程响应。此数值也需根据流程特性决定。
- 日志记录即流程实例运行的数据库历史记录,关闭此选项流程能提高运行性能 但不再记录流程的运行状况,Monitor也不能查询到相关的执行记录(错误的流程运行除外)。
全局变量管理 将“优化变量”设为不启用,如果勾选的话,会做一些回收后续节点不再使用的变量的操作,关闭此项可提高流程运行性能。
# WS服务调优
服务的集群属性即负载均衡,让同一个服务运行在多个运行服务器上从而提高性能,此属性需根据服务特性决定。
服务运行日志的记录也会关系到流程实例运行性能,实际情形中如不需要记录日志则可不选。
# 调节日志
通过修改logging.xml文件,调节日志级别,可以降低系统写日志所带来的开销。
日志的级别分为DEBUG、INFO、WARN、ERROR四种,级别的大小顺序为:DEBUG <INFO <WARN <ERROR。在压力、性能测试时,尽可能将日志的级别调整为最高级别ERROR,从而减少不必要的日志输出,达到提高性能的目的。
在 AESB中有几个配置文件控制了日志的输出,包括logging.xml、process-log.xml、esb.conf等,这几个配置文件都放 在%AESB_MANAGER_HOME%/config、%AESB_LB_HOME%/config和%AESB_RUNTIME_HOME% /config目录下。
# 调整logging.xml
设置默认全局日志级别为ERROR
<handler class="com.apusic.logging.ConsoleHandler">
<property name="level" value="INFO"/>
</handler>
2
3
调整为:
<handler class="com.apusic.logging.ConsoleHandler">
<property name="level" value="ERROR"/>
</handler>
2
3
接下来配置各个包的日志输出级别,比如:配置以apusic.mq开头的包,其下的JAVA日志输出级别调整为ERROR
<logger name="apusic.mq" level="INFO">
<handler class="java.util.logging.FileHandler">
<property name="level" value="INFO" />
<property name="limit" value="2000000" />
<property name="count" value="20" />
<property name="pattern" value="%h/logs/mq_info.log" />
<property name="append" value="true" />
<formatter class="com.apusic.logging.SimpleFormatter" />
</handler>
</logger>
2
3
4
5
6
7
8
9
10
调整为:
<logger name="apusic.mq" level="ERROR">
<handler class="java.util.logging.FileHandler">
<property name="level" value="INFO" />
<property name="limit" value="2000000" />
<property name="count" value="20" />
<property name="pattern" value="%h/logs/mq_info.log" />
<property name="append" value="true" />
<formatter class="com.apusic.logging.SimpleFormatter" />
</handler>
</logger>
2
3
4
5
6
7
8
9
10
其它几个logger同样可以配置为ERROR级别。
此调整的目的是,在记录日志文件时,有关esb的日志只记录ERROR级别的日志。其实这个调整在非压力测试的情况下也是可以调整的,在AESB稳定运行期,只需要记录错误日志就够了。只有在流程设计期,需要调试流程时才将非错误日志输出。
# 调整process-log.xml
将以下内容:
<root>
<level value="DEBUG"/>
<appender-ref ref="STDOUT" />
<appender-ref ref="file_appender" />
</root>
2
3
4
5
调整为:
<root>
<level value="ERROR"/>
<appender-ref ref="STDOUT" />
<appender-ref ref="file_appender" />
</root>
2
3
4
5
6
此调整的目的是,在消息流程实例运行时,只在控制台输出流程执行过程中的错误。对于非错误日志,例如流程执行过程日志,不进行输出。其 实这个调整在非压力测试的情况下也是可以调整的,在AESB稳定运行期,只需要记录错误日志就够了。只有在流程设计期,需要调试流程时才将非错误日志输 出。
# 调整运行服务器esb.conf,不记录流程日志
将以下内容:
<SERVICE CLASS="com.apusic.esb.runtime.process.mbean.ProcessRuntimeService">
<ATTRIBUTE NAME="NeedSendMailIfException" VALUE="False"/>
<ATTRIBUTE NAME="StoreLog" VALUE="True"/>
<ATTRIBUTE NAME="EnableDebug" VALUE="True"/>
</SERVICE>
2
3
4
5
调整为:
<SERVICE CLASS="com.apusic.esb.runtime.process.mbean.ProcessRuntimeService">
<ATTRIBUTE NAME="NeedSendMailIfException" VALUE="False"/>
<ATTRIBUTE NAME="StoreLog" VALUE="False"/>
<ATTRIBUTE NAME="EnableDebug" VALUE="True"/>
</SERVICE>
2
3
4
5
关闭消息流程实例运行时记录数据库日志的功能,使得流程在运行时不再记录数据库,从而提高流程运行的效率。这个调整一般只适合在做压力测试时,在正常运行的时候,往往还是需要记录数据库日志的。
# 系统数据库
AESB无默认系统数据库,可参看数据源配置。根据目标数据库类型进行初始化,系统数据库的性能会影响到流程和服务运行时日志记录效率,选择性能优异的数据库有助于AESB性能提高。
# esb.conf文件中性能相关调整
# 减少多路复用池连接的反复创建
<SERVICE CLASS="com.apusic.util.ThreadPoolService NAME="apusic:service=ThreadPool,name=MuxHandler">
....
<ATTRIBUTE NAME="IdleTimeout" VALUE="60"/>
<ATTRIBUTE NAME="MinSpareThreads" VALUE="5"/>
<ATTRIBUTE NAME="MaxSpareThreads" VALUE="10"/>
<ATTRIBUTE NAME="MaxThreads" VALUE="10"/>
<ATTRIBUTE NAME="MaxQueueSize" VALUE="500"/>
</SERVICE>
2
3
4
5
6
7
8
调整为:
<SERVICE CLASS="com.apusic.util.ThreadPoolService" NAME="apusic:service=ThreadPool,name=MuxHandler">
....
<ATTRIBUTE NAME="IdleTimeout" VALUE="60"/>
<ATTRIBUTE NAME="MinSpareThreads" VALUE="5"/>
<ATTRIBUTE NAME="MaxSpareThreads" VALUE="10"/>
<ATTRIBUTE NAME="MaxThreads" VALUE="30"/>
<ATTRIBUTE NAME="MaxQueueSize" VALUE="5000"/>
</SERVICE>
2
3
4
5
6
7
8
# HTTP池与多路复用池容量比例在3:1左右
<SERVICE CLASS="com.apusic.util.ThreadPoolService" NAME="apusic:service=ThreadPool,name=HTTPHandler">
....
<ATTRIBUTE NAME="IdleTimeout" VALUE="60"/>
<ATTRIBUTE NAME="MinSpareThreads" VALUE="10"/>
<ATTRIBUTE NAME="MaxSpareThreads" VALUE="30"/>
<ATTRIBUTE NAME="MaxThreads" VALUE="100"/>
<ATTRIBUTE NAME="MaxQueueSize" VALUE="5000"/>
</SERVICE>
2
3
4
5
6
7
8
属性配置描述,可根据描述信息,进行适当调整。
线程池配置属性描述:
| 属性 | 描述 | 值类型 | 缺省值 |
|---|---|---|---|
MinSpareThreads | 此属性决定线程池中的最小备用线程数 | 整型 | 5 |
MaxSpareThreads | 此属性决定线程池中的最大备用线程数 | 整型 | 30 |
MaxThreads | 此属性决定线程池所能提供的最大线程数,-1表示不限数量 | 整型 | 30 |
MaxQueueSize | 此属性决定等待获取线程队列的最大长度(可以适当加大) | 整型 | 500 |
IdleTimeout | 等待超时时间,当线程池中的某个线程等待被使用的实际时间超过此属性数值时,线程池自动关闭此线程 | 整型(秒) | 300 |
# WebService部分参数调整
<SERVICE CLASS="com.apusic.web.WebService">
<ATTRIBUTE NAME="MaxWaitingClients" VALUE="5000"/>
<ATTRIBUTE NAME="WaitingClientTimeout" VALUE="60"/>
<ATTRIBUTE NAME="KeepAlive" VALUE="True"/>
<ATTRIBUTE NAME="KeepAliveTimeout" VALUE="30"/>
<ATTRIBUTE NAME="MaxKeepAliveRequests" VALUE="1000"/>
<ATTRIBUTE NAME="MaxKeepAliveConnections" VALUE="1000"/>
<ATTRIBUTE NAME="NumberSelectors" VALUE="1"/>
<ATTRIBUTE NAME="ServletReloadCheckInterval" VALUE="30000000"/>
<ATTRIBUTE NAME="EnableLog" VALUE="False"/>
<ATTRIBUTE NAME="LogFileName" VALUE="logs/access.log"/>
<ATTRIBUTE NAME="LogFileLimit" VALUE="1000000"/>
<ATTRIBUTE NAME="LogFileCount" VALUE="10"/>
</SERVICE>
2
3
4
5
6
7
8
9
10
11
12
13
14
属性配置描述,可根据描述信息,进行适当调整。
WebService配置属性描述:
| 属性 | 描述 | 值类型 | 缺省值 |
|---|---|---|---|
WaitingClientTimeout | 表示当队列已满时经过多长时间将请求抛弃(如果期望在测试中少出现访问失败,而对时间响应要求可以容忍慢一些,该参数可适当加大) | 整型(秒) | 60 |
MaxWaitingClients | 如果当前并发用户数已达到最大值,则客户请求被保持到一个队列中,此参数决定此队列可保持的最大等待客户请求数(如果期望在测试中少出现访问失败,而对时间响应要求可以容忍慢一些,该参数可适当加大) | 整型 | 5000 |
KeepAlive | 此属性决定是否保持与当前客户端的连接(最好为True,复用socket) | True或False | True |
KeepAliveTimeout | 与当前客户端连接的超时数(如果客户端访问不是太频繁,可适当增大该值) | 整型(秒) | 30 |
MaxKeepAliveRequests | 客户端请求被保持到一个请求队列,此属性用于决定请求队列可保持的最大客户端请求数 | 整型 | 100 |
MaxKeepAliveConnections | 表示系统同时保存的最大连接个数,超过这一个数时最近最少被使用的连接将被关闭(和上一个参数保持适当的比例) | 整型 | 300 |
ServletReloadCheckInterval | 检查Servlet 是否被修改的时间间隔(如果系统可以长时间不变,可将该值设的大一些,在AESB压力测试时,不存在servlet装载的问题,这个值可以调到非常大,如3000000000000) | 整型(秒) | 864000 |
← Monitor使用手册 常见问题→