生产环境 Tomcat 调优实际操作(3)

随机数产生器会手��来自设备驱动器和其它源的环境噪声数据,并放入熵池中。产生器会评估熵池中的噪声数据的数量。当熵池为空时,这个噪声数据的收集是比较花时间的。这就意味着,Tomcat在生产环境中使用熵池时,会被阻塞较长的时间。

解决

有两种解决办法:

1)在Tomcat环境中解决

可以通过配置JRE使用非阻塞的Entropy Source。

在catalina.sh中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。

加入后再启动Tomcat,整个启动耗时下降到Server startup in 2912 ms。

2)在JVM环境中解决

打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:

securerandom.source=file:/dev/urandom

替换成
securerandom.source=file:/dev/./urandom

tomcat的缺省配置是不能长期稳定的运行的,也就是不适合生产环境,会出现死机的情况,让他不断的重启。对于操作系统的优化来说,是尽可能的提高内存容量,提高cpu的频率,保证文件系统的读写速率。

tomcat的优化主要有三方面,分为系统优化,tomcat自身优化,java虚拟机(jvm)调优,此处主要讨论后两种。

一、tomcat本身优化

1 工作方式选择

为了提升性能,首先就要对代码进行动静分离,让 Tomcat 只负责 jsp 文件的解析工作。如采用 Apache 和 Tomcat 的整合方式,他们之间的连接方案有三种选择,JK、http_proxy 和 ajp_proxy。相对于 JK 的连接方式,后两种在配置上比较简单的,灵活性方面也一点都不逊色。但就稳定性而言不像JK 这样久经考验,所以建议采用 JK 的连接方式。

2 connector连接器的工作方式

Tomcat 连接器的三种方式: bio、nio 和 apr,三种方式性能差别很大,apr 的性能最优, bio 的性能最差。而 Tomcat 7 使用的 Connector  默认就启用的 Apr 协议,但需要系统安装 Apr 库,否则就会使用 bio 方式。

3配置文件优化

(1) 线程池

tomcat为每个connector绑定一个线程池(默认最大线程数为200)。


配置方式如下:

<Executor namePrefix="catalina-exec-"

maxThreads="500" minSpareThreads="20" maxSpareThreads="50" maxIdleTime="60000"/>

<Connector executor="tomcatThreadPool"
              port="8080" protocol="HTTP/1.1"

URIEncoding="UTF-8"

connectionTimeout="30000"

enableLookups="false"

disableUploadTimeout="false"

connectionUploadTimeout="150000"

acceptCount="300"

keepAliveTimeout="120000"

maxKeepAliveRequests="1"

compression="on"

compressionMinSize="2048"

compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png"

redirectPort="8443" />

maxThreads:tomcat使用线程来处理请求,这个值表示tomcat可以创建的最大线程数,默认值为200。

minSpareThreads:最小空闲线程数,tomcat启动时的初始化线程数,表示即便没有请求,也要开启这么多的线程等待,默认值是10。

maxSpareThreads:最大空闲线程数,一旦空闲的线程数超过这个值,tomcat就会关闭不在需要的socket线程。

maxThreads的值越大就会越消耗内存和CPU,因为CPU疲于处理线程上下文切换,就没有精力处理请求了。具体的值要取决于系统参数及实际应用场景。线程池可以配置在tomcatTheadPool中,也可以直接配置在connector中,但不可以重复配置。


(2)URIEncoding:指定 Tomcat 容器的 URL 编码格式,语言编码格式这块倒不如其它 WEB 服务器软件配置方便,需要分别指定。

(3)connnectionTimeout: 网络连接超时,单位:毫秒,设置为 0 表示永不超时,这样设置有隐患的。通常可设置为 30000 毫秒,可根据检测实际情况,适当修改。

(4)enableLookups: 是否反查域名,以返回远程主机的主机名,取值为:true 或 false,如果设置为false,则直接返回IP地址,为了提高处理能力,应设置为 false。

(5)disableUploadTimeout:上传时是否使用超时机制。

(6)connectionUploadTimeout:上传超时时间,毕竟文件上传可能需要消耗更多的时间,这个根据你自己的业务需要自己调,以使Servlet有较长的时间来完成它的执行,需要与上一个参数一起配合使用才会生效。

(7)acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可传入连接请求的最大队列长度,超过这个数的请求将不予处理,默认为100个。

(8)keepAliveTimeout:长连接最大保持时间(毫秒),表示在下次请求过来之前,Tomcat 保持该连接多久,默认是使用 connectionTimeout 时间,-1 为不限制超时。

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

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