server.xml
executor
<!--连接池配置--> <Executor name="selfThreadPool" --线程池名,根据具体业务定义,需要在Connector中引用才可以生效 namePrefix="catalina-exec-" --线程名称前缀,根据具体业务定义 namePrefix+threaNumber maxThreads="1000" --池中最大线程数 minSpareThreads="100" --活跃线程数 会一直存在 maxIdleTime="60000" --线程空闲时间,超过该时间,线程会被销毁 ms maxQueueSize="Integer.MAX_VALUE" --被执行前线程的排队数目 prestartminSpareThreads="false" --启动线程池时,是否启用minSpareThreads部分线程 threadPriority="5" --线程池中线程优先级 1~10 className="org.apache.catalina.core.StandardThreadExecutor" --线程实现类 自定义线程需时间 org.apache.catalina.Executor类 />
connector
<Connector
executor="selfthreadPool" port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" --协议类型,此协议对静态页面的亲和较好,需要安装apr,可以参考:https://www.cnblogs.com/zh-dream/p/13620379.html keepAliveTimeout="20000" maxKeepAliveRequests="500" --tomcat需要保持的最大请求数,即处于keepAlive状态的请求的个数,建议此值为maxThreads * 0.5,不得大于maxThreads,否则将得不到预期的效果,设置为-1时,表示禁用HTTP/1.0 keep-alive、HTTP/1.1 keep-alive和pending connectionTimeout="20000" --已接受,但未被处理的请求的等待超时时间 ms redirectPort="8443" --安全通信的转发端口 URIEncoding="UTF-8" --URL编码字符集 minSpareThreads="100" --默认初始化和保持空闲的线程数 enableLookups="false" --关闭DNS反向查询 useURIValidationHack="false" --关闭不必要的检查 maxThreads="1000" --处理请求线程的最大数目 未配置为200 此属性会被忽略 acceptCount="1000" --所用可能的线程都在使用时传入连接请求的最大长度 disableUploadTimeout="true" --设置允许更长的超时连接 maxConnections="1000" --接受和处理的最大连接数(nio/nio2 1000,apr 8192) maxHttpHeaderSize="8192" --请求和响应http头的最大大小 8k tcpNoDelay="true" --禁用Nagle算法,该算法用于连接小的缓冲信息,会降低通过网络发送数据包的数量,提升网络传输速率,但是对交互式应用来说,会增加响应时间 compression="on" --是否启用压缩 on off force compressionMinSize="2048" --压缩前数据最小值 2k byte noCompressionUserAgents="gozilla,traviata" --设置哪些浏览器不压缩 compressableMimeType="text/html,text/xml,text/css,application/javascript,text/plain" --设置压缩的文件类型 />
Host
需要禁用autodeploy属性
注意:如果采用server.xml文件中增加<Context>元素或者在Web应用的META-INF目录定义context.xml文件部署应用,需要确保reloadable属性为false,避免WEB-INF/classes或WEB-INF/lib目录下的文件变更时自动重新加载应用。
JSP页面的设置
[root@apache conf]# vim $CATALINA_HOME/conf/web.xml <servlet> <!-- 定义Servlet引擎的名称和应用类名称,DefaultServlet用于静态页面,JspServlet用于jsp页面,DispatcherServlet用于springMVC --> <servlet-name>jsp</servlet-name> <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> <init-param> <param-name>fork</param-name> <param-value>false</param-value> </init-param> <init-param> <!-- 调整Tomcat不检测JSP页面的修改,与reloading属性一样,通常在测试环境调试时设置为true --> <param-name>development</param-name> <param-value>false</param-value> </init-param> <init-param> <!-- 禁用Tomcat后台自动编译 --> <param-name>reloading</param-name> <param-value>false</param-value> </init-param> <init-param> <!-- JSP页面后台编译的触发频率,默认值0,单位 s --> <param-name>checkInterval</param-name> <param-value>0</param-value> </init-param> <init-param> <!-- 检测JSP页面修改的时间间隔,默认值4,单位 s --> <param-name>modificationTestInterval</param-name> <param-value>4</param-value> </init-param> <init-param> <!-- 生成高效的字符属组 --> <param-name>getStringAsCharArray</param-name> <param-value>true</param-value> </init-param> <init-param> <!-- 移除响应中无用的空格 --> <param-name>trimSpace</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>xpoweredBy</param-name> <param-value>false</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet>
其他与JSP性能相关的属性
org.apache.jasper.runtime.JspFactoryImpl.USE_POOL:是否启用Body池,默认启用
org.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER:整数,当输出JSP标签Body时,是否进行字符缓冲,默认为false
org.apache.jasper.runtime.JspFactoryImpl.POOL_SIZE:整数,JSP标签Body池大小,默认为8
以上三个参数可以在catalina.sh中启用:
CATALINA_OPTS="-Dorg.apache.jasper.runtime.JspFactoryImpl.USE_POOL=true"
注意:如果JSP页面或者标签Body非常大,需要关闭此属性
如果报错:请求的jsp页面代码超过65535字节限制,可以将mappedfile置为false
<init-param> <param-name>mappedfile</param-name> <param-value>false</param-value> </init-param>