史上最强Tomcat8性能优化(下)( 二 )


标准实现(加粗是重点)除了上面列出的常见的连接器属性 , 标准的HTTP连接器(BIO , NIO和APR/native)都支持以下属性 。
AttributeDescriptionacceptCount当所有可能的请求处理线程都在使用时 , 传入连接请求的最大队列长度 。 当队列满时收到的任何请求将被拒绝 。 默认值是100 。 acceptorThreadCount用于接受连接的线程的数量 。 在一个多CPU的机器上 , 增加该值 , 虽然你可能不会真正需要超过2个 。 此外 , 有很多非保持活动连接 , 您可能需要增加这个值 。 默认值是 1 。 acceptorThreadPriority接收器线程的优先级 。 该线程用来接受新的连接 。 默认值是5(java.lang.Thread.NORM_PRIORITY常量) 。 更多这个优先级是什么意思的详细信息 , 请查看java.lang.Thread的类的JavaDoc。 address对于拥有多个IP地址的服务器 , 该属性指定哪个地址将被用于在指定端口上监听 。 默认情况下 , 该端口将被用于与服务器相关联的所有IP地址 。 bindOnInit控制连接器绑定时套接字的使用 。 缺省情况 , 当连接器被启动时套接字被绑定和当连接器被销毁时套接字解除绑定 。 如果设置为false , 连接器启动时套接字被绑定 , 连接器停止时套接字解除绑定 。 compressableMimeType该值是一个被用于HTTP压缩的逗号分隔的MIME类型列表 。 默认值是text / html类型 , 为text / xml , text / plain 。 compression通常会在ngnix里面配置压缩, 开启压缩GZIP 为了节省服务器带宽 , 连接器可以使用HTTP/1.1 GZIP压缩 。 可接受的参数的值是“off ”(禁用压缩) , “on ”(允许压缩 , 这会导致文本数据被压缩) , “force ”(强制在所有的情况下压缩) , 或者一个整数值(这是相当于为“on” , 但指定了输出之前被压缩的数据最小量) 。 如果不知道内容长度但被设置为“on”或更积极的压缩 , 输出的数据也将被压缩 。 如果没有指定 , 该属性被设置为“关” 。 注意:这是使用压缩(节省您的带宽)和使用sendfile功能(节省你的CPU周期)之间的权衡 。 如果连接器支持sendfile功能 , 例如NIO连接 , 则使用sendfile将优先于压缩 。 症状是48 KB的静态文件将未压缩就发送 。 你可以如下文所述通过设置连接器的useSendfile属性来关闭sendfile , 或在默认的conf/web.xml或者你的web应用的web.xml中配置DefaultServlet来改变sendfile的使用量阈值 。 compressionMinSize如果压缩被设置为“on” , 那么该属性可以用于指定在输出之前被压缩的数据的最小量 。 如果未指定 , 此属性默认为“2048” 。 connectionLinger连接器的套接字被关闭时的逗留秒数 。 如果没有指定 , 将使用默认的JVM 。 connectionTimeout在将提交的请求URI行呈现之后 , 连接器将等待接受连接的毫秒数 。 使用值-1表示没有超时(即无限) 。 默认值是60000(60秒) , 但请注意 , Tomcat的标准server.xml中 , 设置为20000(即20秒) 。 connectionUploadTimeout上传数据过程中 , 指定的以毫秒为单位超时时间 。 只有在设置disableUploadTimeout为false有效 。 disableUploadTimeout此标志允许servlet容器在数据上传时使用不同的连接超时 , 通常较长 。 如果没有指定 , 该属性被设置为true , 禁用上传超时 。 executor指向Executor元素的引用 。 如果这个属性被设置 , 并且被命名的executor存在 , 连接器将使用这个executor , 而其他所有线程相关属性将被忽略 。 请注意共享的executor如果没有指定到一个连接器 , 则该连接器将使用一个私有的 , 内部的executor来提供线程池 。 executorTerminationTimeoutMillisThe time that the private internal executor will wait for request processing threads to terminate before continuing with the process of stopping the connector. If not set, the default is 0 (zero) for the BIO connector and 5000 (5 seconds) for the NIO and APR/native connectors.keepAliveTimeout此连接器在关闭连接之前将等待另一个HTTP请求的毫秒数 。 默认值是使用已设置的connectionTimeout属性的值 。 使用值-1表示没有超时(即无限) 。 maxConnections在任何给定的时间服务器接受并处理的最大连接数 。 当这个数字已经达到了 , 服务器将不会接受任何连接 , 直到连接的数量降到低于此值 。 基于acceptCount的设置 , 操作系统可能仍然接受连接 。 默认值根据不同的连接器类型而不同 。 对于BIO , 默认的是maxThreads的值 , 除非使用了Executor , 在这种情况下默认值是executor的maxThreads值。 对于NIO的默认值是10000 。 APR /native的默认值是8192 。 需要注意的是Windows系统的APR/native , 所配置的值将减少到小于或等于maxConnections的1024的倍数的最大值 。 这样做是出于性能方面的考虑 。 如果设置的值-1 , maxConnections功能被禁用 , 而且连接数将不做计算 。 maxExtensionSize限制HTTP区块请求中区块扩展的总长度 。 如果值为-1 , 则不施加任何限制 。 如果未指定 , 8192将使用默认值 。 maxHttpHeaderSize请求和响应的HTTP头的(以字节为单位的)最大尺寸 。 如果没有指定 , 该属性被设置为8192(8 KB) 。 maxKeepAliveRequestsHTTP请求最大长连接个数 。 将此属性设置为1 , 将禁用HTTP/1.0、以及HTTP/1.1的长连接 。 设置为-1 , 不禁用 。 如果没有指定 , 该属性被设置为100 。 maxSwallowSizeTomcat会为中止的上载而吞下的请求正文字节的最大数量(不包括传输编码开销) 。 上载中止是指Tomcat知道将忽略请求主体 , 但客户端仍将其发送 。 如果Tomcat不吞咽该主体 , 则客户端不太可能看到响应 。 如果未指定 , 将使用默认值2097152(2兆字节) 。 小于零的值表示不应强制执行任何限制 。 maxThreads最多同时处理的连接数 , Tomcat使用线程来处理接收的每个请求 。 这个值表示Tomcat可创建的最大的线程数 。 如果没有指定 , 该属性被设置为200 。 如果使用了execute将忽略此连接器的该属性 , 连接器将使用execute , 而不是一个内部线程池来处理请求 。 maxTrailerSize限制一个分块的HTTP请求中的最后一个块的尾随标头的总长度 。 如果该值是-1 , 没有限制的被强加 。 如果没有指定 , 默认值是8192 。 minSpareThreads始终保持运行最小线程数 。 如果没有指定 , 则默认为10 。 noCompressionUserAgents该值是一个正则表达式(使用java.util.regex) , 匹配不应该使用压缩的HTTP客户端的用户代理标头 。 因为这些客户端 , 虽然他们宣称支持压缩功能 , 但实现不完整 。 默认值是一个空字符串(正则表达式匹配禁用) 。 processorCache协议处理器缓存Processor对象以提高性能 。 此设置规定了这些对象有多少能得到缓存 。 -1意味着无限制 , 默认为200 。 如果不使用Servlet 3.0的异步处理 , 一个好的默认是使用maxThreads设置 。 如果使用Servlet 3.0的异步处理 , 一个好的默认是使用maxThreads和最大预期的并发请求(同步和异步)的最大值中的较大值 。 restrictedUserAgents该值是一个正则表达式(使用java.util.regex) , 匹配用户代理头的HTTP浏览器将不能使用HTTP/1.1或HTTP/1.0长连接 , 即使该浏览器宣称支持这些功能的 。 默认值是一个空字符串(正则表达式匹配禁用) 。 server覆盖服务器的HTTP响应头 。 如果设置了这个属性的值将覆盖Web应用程序设置的Tomcat的默认头和任何服务器头 。 如果没有设置 , 应用程序指定的任何值将被使用 。 如果应用程序没有指定一个值 , 那么Apache-Coyote/1.1将被使用 。 除非你是偏执狂 , 你将不再需要此功能 。 socketBuffer为套接字输出缓冲而提供的缓冲区的大小(以字节为单位) 。 -1可以被指定来禁止使用的缓冲区 。 默认情况下 , 一个9000个字节的缓冲区将被使用 。 SSLEnabled在连接器上使用此属性来启用SSL加密传输 。 如果要打开SSL握手/加密/解密 , 请设置true 。 默认值是false 。 当设置这个值为true时 , 为了传递正确的request.getScheme()和 request.isSecure()到servlets , 你需要设置scheme和secure属性 。 更多信息请查看SSL支持 。 tcpNoDelay如果设置为true , TCP_NO_DELAY选项将被设置在服务器上的套接字上 , 在大多数情况下 , 这样可以提高性能 。 默认设置为true 。 threadPriority在JVM中请求处理线程的优先级 。 默认值是5(java.lang.Thread.NORM_PRIORITY常量值) 。 关于优先级的更多详细信息 , 请查看java.lang.Thread的类的JavaDocupgradeAsyncWriteBufferSizeThe default size of the buffer to allocate to for asynchronous writes that can not be completed in a single operation. Data that can’t be written immediately will be stored in this buffer until it can be written. If more data needs to be stored than space is available in the buffer than the size of the buffer will be increased for the duration of the write. If not specified the default value of 8192 will be used.