#********************************************************************
# Wrapper Properties
#********************************************************************
# Java执行命令,默认即可
wrapper.java.command=java
# 用于定位wrapper程序目录,默认即可
wrapper.working.dir=..

# JSW wrapper类,JSW将使用这个类来包装Mycat启动类(MycatStartup.java),并控制Mycat的执行,
# 即在WrapperSimpleApp的main方法里面加入一些控制逻辑,
# 然后执行MycatStartup的main方法,从而跑其Mycat
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

# 设置环境变量,参考https://wrapper.tanukisoftware.com/doc/english/props-envvars.html
# 在后面的配置wrapper.java.classpath.3被使用
set.default.REPO_DIR=lib
# 不知道哪里会用到这个环境变量
set.APP_BASE=.

# Java Classpath (include wrapper.jar)  Add class path elements as
#  needed starting from 1
# 配置Java应用的classpath,必须要包含wrapper.jar,参数下标从1开始
wrapper.java.classpath.1=lib/wrapper.jar
wrapper.java.classpath.2=conf
wrapper.java.classpath.3=%REPO_DIR%/*

# Java Library Path (location of Wrapper.DLL or libwrapper.so)
# 默认参数,不用修改
wrapper.java.library.path.1=lib

# 配置Java启动参数,参数下标从1开始,包括一系列Java环境变量设定以及JVM参数配置
#wrapper.java.additional.1=
wrapper.java.additional.1=-DMYCAT_HOME=.
wrapper.java.additional.2=-server
wrapper.java.additional.3=-XX:MaxPermSize=64M
wrapper.java.additional.4=-XX:+AggressiveOpts
wrapper.java.additional.5=-XX:MaxDirectMemorySize=8G
wrapper.java.additional.6=-XX:+UseParallelGC
wrapper.java.additional.7=-Xss512K
wrapper.java.additional.8=-Dcom.sun.management.jmxremote
wrapper.java.additional.9=-Dcom.sun.management.jmxremote.port=1984
wrapper.java.additional.10=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.11=-Dcom.sun.management.jmxremote.ssl=false
wrapper.java.additional.12=-Xmx4G
wrapper.java.additional.13=-Xms4G

# Initial Java Heap Size (in MB) 等价于 -Xms3M
#wrapper.java.initmemory=3

# Maximum Java Heap Size (in MB) 等价于 -Xmx64M
#wrapper.java.maxmemory=64

# 程序启动参数,下标从1开始,第1个参数指定wrapper需要包装的Java应用主程序入口,
# 对于Mycat而言,这里指定为MycatStartup,默认即可,不需要修改
wrapper.app.parameter.1=org.opencloudb.MycatStartup
# 默认即可,不需要修改
wrapper.app.parameter.2=start

#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# wrapper 控制台日志输出格式
# 仅当使用mycat console启动时候,会将log输出到控制台,这个参数是控制这个时候log的输出格式
# 格式详见: https://wrapper.tanukisoftware.com/doc/english/prop-console-format.html
wrapper.console.format=PM

# wrapper 控制台输出日志级别
# 仅当使用mycat console启动时候,会将log输出到控制台,这个参数是控制这个时候log的级别, 默认为INFO即可
wrapper.console.loglevel=INFO

# wrapper 输出日志文件
# 仅当使用mycat start启动时,会将log输出到这个指定的文件里
wrapper.logfile=logs/wrapper.log

# wrapper 输出到log文件的日志输出格式
# 控制当使用mycat start启动方式下log输出格式
# 格式参考: https://wrapper.tanukisoftware.com/doc/english/prop-logfile-format.html
wrapper.logfile.format=LPTM

# wrapper 输出到log文件的日志级别
# 控制当使用mycat start启动方式下log输出级别
wrapper.logfile.loglevel=INFO

# 配置滚动日志大小,默认为0,表示不支持滚动日志,即日志都往一个日志文件里面写,并且不限制文件大小
# May abbreviate with the 'k' (kb) or 'm' (mb) suffix.  For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=0


# 配置滚动日志最大文件个数,默认为0表示不限制个数
wrapper.logfile.maxfiles=0

# 输出到sys/event log的日志级别,默认为NONE表示不输出到sys/event log
wrapper.syslog.loglevel=NONE

#********************************************************************
#********************************************************************
# Title to use when running as a console
wrapper.console.title=Mycat-server

# 以下这些参数在Windows平台下起作用,一般应用都部署在Linux平台,可忽略这些配置
#********************************************************************
# Wrapper Windows NT/2000/XP Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
#  using this configuration file has been installed as a service.
#  Please uninstall the service before modifying this section.  The
#  service can then be reinstalled.

# Name of the service
wrapper.ntservice.name=mycat

# Display name of the service
wrapper.ntservice.displayname=Mycat-server

# Description of the service
wrapper.ntservice.description=The project of Mycat-server

# Service dependencies.  Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=

# Mode in which the service is installed.  AUTO_START or DEMAND_START
wrapper.ntservice.starttype=AUTO_START

# Allow the service to interact with the desktop.
wrapper.ntservice.interactive=false

# 重要参数,控制wrapper ping Mycat hung住的超时时间,单位是s,120s = 2min
wrapper.ping.timeout=120
# JSW官网上目前找不到这个参数!
configuration.directory.in.classpath.first=conf
[hr]



MyCAT所有的调优参数都可以才server.xml中找到。mycat中几个关键的调优点已经Mycat性能调优指南.docx中有所讨论,这里只做为该文档的补充。
本章主要讨论如下两个内容:

processors数值的影响范围。
buffer和buffer队列大小。
processors数值定义了如下几个类的实例个数:

NIOProcessor
NIOReactorPool
AsynchronousChannelGroup
NIOProcessor类,持有所有的前后端连接,定期的空闲检查和写队列检查。要完成这个动作。Mycat是通过遍历NIOProcessor持有的所有连接来完成的。
所以,可以适当的根据系统性能调整NIOProcessor的个数。使得前、后段连接可以均匀的分布在每个NIOProcessor上。这样,就可以加快每次的空闲检查和写队列检查。快速的将空闲的连接关闭,减轻服务器的内存使用量。
NIOReactor是NIO中具体执行selector的类,当满足感兴趣的事件发生的时候,他就通知上次逻辑进行具体的处理。所以,NIOReactor的个数据等于具体事件处理器的个数。如果系统的配置允许的话,应该尽可能的增大NIOReactor的数量。默认值是系统核心数。
AsynchronousChannelGroup是AIO中必须提供的一个组成部分。AsynchronousChannelGroup根据processors的数值,确定实例数和channelGroup组内的线程池大小。后端AIO连接循环取AsynchronousChannelGroup数组中的实例。所以。如果是在AIO模式下使用Mycat的话,调整这个参数也是有必要的。默认值是系统核心数。
最后,可以根据自己硬件的实际情况,配置processors的具体大小。例如,配置processor的个数为16: server.xml文件中定义

<property name="processors">16</property>
还有一个要讨论的就是buffer pool。因为,所有的NIOProcessor共享一个buffer pool。
我们在server.xml中提到过:
BufferPool的总长度 = bufferPool / bufferChunk
我们可以连接到Mycat管理端口上,使用show @@processor命令列出所有的processor状态。
查看列: FREE_BUFFER、TOTAL_BUFFER、BU_PERCENT。
如果FREE_BUFFER的数值过小,则说明配置的buffer pool大小可能不够。这时候就要手动配置根据公式这个属性了,pool的大小最好是bufferChunk的整数倍。例如,配置buffer pool的大小为:5000 server.xml文件中定义

<property name="processorBufferPool">20480000</property>

另一个buffer pool是线程内buffer pool,这个值可以根据processors的数值计算出来。具体看server.xml配置详解。