Tomcat 8.0的并发优化(2)

minSpareThreads="25" # Tomcat连接器的最小空闲Socket线程数, 默认值为25. 如果当前没有空闲线程, 且没有超过maxThreads, 将一次性创建的空闲线程数量. Tomcat初始化时创建的线程数量也是此值.

maxSpareThreads="75" # 最大空闲线程数, 一旦创建的线程超过此值, Tomcat就会关闭不再需要的Socket线程, 默认值为50. 线程数可以大致用 "同时在线用户数、用户每秒操作次数、系统平均操作时间" 来计算.

keepAliveTimeout="6000" # 下次请求到来之前, Tomcat保持该连接6000ms.

maxKeepAliveRequests="10" # 该连接最大支持的请求数, 超过该请求数的连接也将被关闭(此时就会返回一个Connection: close头给客户端). 1表示禁用长连接, -1表示不限制连接个数, 默认为100, 一般设置在100~200之间.

acceptorThreadCount="1" # 用于接收连接的线程的数量, 默认值是1. 一般如果服务器是多核CPU时, 需要改配置为 2.

enableLookups="false" # 是否支持反查域名(即DNS解析), 默认为true. 为提高处理能力, 应设置为false.

disableUploadTimeout="true" # 上传时是否启用超时机制, 若为true, 则禁用上传超时.

connectionTimeout="20000" # 网络连接超时时间, 默认值为20000ms, 设置为0表示永不超时 —— 存在隐患. 通常可设置为30000ms.

URIEncoding="UTF-8" # 指定Tomcat容器的URL编码格式.

maxHttpHeaderSize="8192" # HTTP请求头信息的最大程度, 超过此长度的部分不予处理. 一般设置为8K即可.

maxPostSize="10485760" # 指定POST请求的内容大小, 单位为Byte, 默认大小为2097152(2MB), 10485760为10M. 如果要禁用限制, 可设置为-1.

compression="on" # 打开传输时压缩功能.

compressionMinSize="10240" # 启用压缩的输出内容大小, 默认为2048, 即2KB.

noCompressionUserAgents="gozilla, traviata" # 设置不启用压缩的浏览器

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" # 压缩的资源类型

(2) 补充说明:


① Tomcat 的压缩是在客户端请求服务器对应资源后, 从服务器端将资源文件压缩, 再输出到客户端, 由客户端的浏览器负责解压缩并浏览. 相对于普通的浏览过程(如浏览HTML、CSS、Javascript和Text), 它可以节省40%左右的流量. 更为重要的是, 它也可以对动态生成的网页(包括CGI、PHP、JSP、ASP、Servlet、SHTML等)进行压缩.

② 需要注意的是, 压缩会增加Tomcat的负担, 最好采用 Nginx + Tomcat 或 Apache + Tomcat 方式, 将压缩交由 Nginx / Apache 去完成. 在server.xml的节点配置(尚未验证使用):
•<Service /> --- 处理所有直接由Tomcat服务器接收的web客户请求.
•<Service /> --- 处理所有由Apahce服务器转发过来的Web客户请求.
•<Service /> --- 处理所有由Nginx服务器转发过来的Web客户端请求.

2.2 使用NIO模式处理请求

(1) 默认配置 - BlockingIO模型:
<Connector port="8080" protocol="HTTP/1.1"
          connectionTimeout="20000"
          redirectPort="8443" />

(2) 关于NIO的说明:

•每个Web客户端请求对服务器端来说就是一个单独的线程, 客户端请求数量增多, 服务器端的处理线程数量也将增加, 对CPU而言, 将会在线程切换上消耗更多的时间. 而NIO则是使用单线程(单个CPU)或只使用少量的多线程(多CPU)来接受Socket, 而由线程池来处理堵塞在 Pipe 或 Queue 中的请求. 这样的话, 只要OS可以接受TCP连接, Web服务器就可以处理该请求 -- 大大提高了Web服务器的伸缩性.

•Tomcat 8 下使用 NIO2, 即 org.apache.coyote.http11.Http11Nio2Protocol 更优.
•Tomcat 6、7 下使用 NIO, 即 org.apache.coyote.http11.Http11NioProtocol 更优.

(3) NIO模型配置:
<Connector executor="tomcatThreadPool"
          port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
          connectionTimeout="20000"
          redirectPort="8443"
          maxPostSize="10485760"
          acceptorThreadCount="2" />

(4) 参数说明:
executor="..."  # 连接器使用的线程池名称.
port="..."      # 连接端口, URL中指定此端口进行访问. 
protocol="..."  # 连接器使用的请求处理模式. 
redirectPort="8443"  # 基于SSL的端口, 在需要基于安全通道的场合, 比如当客户端的请求协议是HTTPS时, 将该请求转发到此8443端口.

2.3 使用APR模式处理请求

可以简单地将APR模式理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库, 进行文件读取或网络传输操作, 从而大大地提高Tomcat对静态文件的处理性能.

APR是Tomcat上运行高并发应用的首选模式, 同时如果使用HTTPS方式传输, 也可以提升SSL的处理性能.

前面已经提到, APR模式会调用操作系统底层的IO接口, 所以需要安装必要的依赖.

(1) 安装OpenSSL:

安装命令如下:
yum -y install openssl-devel

(2) 安装APR组件:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/cf4287bbf3f2b6e844fceefb1b5c47cc.html