«
Tomcat优化

时间:2022-8-22     作者:李泽信     分类: Tomcat


[root@localhost ~]# vi /usr/local/tomcat/conf/web.xml
115         <init-param>
116             <param-name>listings</param-name>
117             <param-value>false</param-value>
118         </init-param>
##禁止列出目录
606     <session-config>
607         <session-timeout>30</session-timeout>
608     </session-config>
## 页面超时
4704     <welcome-file-list>
4705         <welcome-file>index.html</welcome-file>
4706         <welcome-file>index.htm</welcome-file>
4707         <welcome-file>index.jsp</welcome-file>
4708     </welcome-file-list>
[root@localhost ~]# vi /usr/local/tomcat/conf/server.xml
115     <!-- Define an AJP 1.3 Connector on port 8009
116     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
117         -->
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh
[root@localhost ~]# netstat -utpln |grep java
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      2354/java           
tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      2354/java 
注:如若有apache、nginx等做代理,tomcat则不必配置传输压缩;
[root@localhost ~]# vi /usr/local/tomcat/conf/server.xml
69     <Connector port="8080" protocol="HTTP/1.1"
70                connectionTimeout="20000"
71                redirectPort="8443"
72                compression="on"                  ##开启压缩
73                compressionMinSize="50"           ##指定最小的压缩文件,单位是字节
74                noCompressionUserAgents="gozilla, traviata"           ##此浏览器类型不进行压缩
75                compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" />      ##压缩文件的格式
[root@localhost ~]#  vi /usr/local/java/jre/lib/security/java.security
      17 securerandom.source=file:/dev/urandom
或   117 securerandom.source=file:/dev/./random
[root@localhost ~]# /usr/local/tomcat/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat/bin/startup.sh 
[root@localhost ~]# vi /usr/local/tomcat/conf/server.xml
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
        URIEncoding="UTF-8"                     ##设置编码
        maxThreads="300"                            ##接收客户请求最大线程数,也就是同时处理请求的最大数目,默认值为“200”,并不是配置的越大越好,事实上你即使配置成999999也是没有用的,因为这个最大值是受操作系统及相关硬件所制约的,并且最大值并不一定是最优值,所以我们追寻的应该是最优值而不是最大值。建议值为1000;
        QPS(Query Per Second):每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。我们常常使用 QPS值来衡量一个服务器的性能。
        QPS = 并发数 / 平均响应时间      或者      并发数 = QPS * 平均响应时间
        一个系统吞吐量通常由QPS、并发数两个因素决定,每套系统的这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能下降。所谓吞吐量这里可以理解为每秒能处理请求的次数。
       所以选择一个合理的 maxThreads值,其实并不是那么容易的事。因为过多的线程只会造成,更多的内存开销,更多的CPU开销,但是对提升QPS确毫无帮助;找到最佳线程数后通过简单的设置,可以让web系统更加稳定,得到最高,最稳定的QPS输出。
   通过以下几种方式来获取 maxThreads的最佳值:
        (1)通过线上系统不断使用和用户的不断增长来进行性能测试,观察QPS,响应时间,这种方式会在爆发式增长时系统崩溃,如双12等。
        (2)根据公式计算,服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量,这种方式有时会被误导,因为某些系统处理环节可能会耗时比较长,从而影响公式的结果。
        (3)单、多用户压力测试,查看CPU的消耗,然后直接乘以百分比,再进行压测,一般这个值的附近应该就是最佳线程数量,这种方式理想场景比较适用,实际情况会比这个复杂的多。
        (4)根据系统的自身情况调整,如硬件限制,系统限制,程序处理能力限制等。
        (5)定期修改为不同的 maxThreads值,看服务器响应结果及用户反应。
       QPS和线程数的关系:
        (1)在最佳线程数量之前,QPS和线程是互相递增的关系,线程数量到了最佳线程之后,QPS持平,不在上升,甚至略有下降,同时相应时间持续上升。
        (2)同一个系统而言,支持的线程数越多(最佳线程数越多而不是配置的线程数越多),QPS越高。
       QPS和响应时间的关系:
        (1)对于一般的web系统,响应时间一般有CPU执行时间+IO等待时间组成。
        (2)CPU的执行时间减少,对QPS有实质的提升,IO时间的减少,对QPS提升不明显。如果要想明显提升QPS,优化系统的时候要着重优化CPU消耗大户。

        minSpareThreads="25"                        ##最小空闲的线程数,Tomcat初始化时创建的 socket线程数,默认为10
        maxSpareThreads="75"                        ##最大空闲线程数,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。默认值50
        enableLookups="false"                       ##关闭DNS反向查询
        disableUploadTimeout="true"                 ##该标志位表明当执行servlet时,是否允许servlet容器使用一个不同的、更长的连接超时。启用该标志位将导致在上传数据时,要么使用更长的时间完成上传,要么出现更长的超时。如果不指定,该属性为“false”。
        connectionTimeout="20000"                   ##当请求已经被接受,但未被处理,也就是等待中的超时时间。单位为毫秒,默认值为60000。通常情况下设置为30000。
        acceptCount="300"                           ##容许的最大连接的队列长度,一般设置为maxProcessors是其参数的1.5倍即可,默认值为100。此值设置的过大会导致排队的请求超时而未被处理。所以这个值应该是主要根据应用的访问峰值与平均值来权衡配置。
        tcpNoDelay="true"                           ##如果为true,服务器socket会设置TCP_NO_DELAY选项,在大多数情况下可以提高性能。缺省情况下设为true。
        maxProcessors="1000"                        ##并发处理的最大请求数,默认值为75,一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程
        <!--   前端使用nginx作为反向代理,不需要启用tomcat压缩功能。
        compression="on"
        compressionMinSize="2048"
        compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
        -->
        redirectPort="8443"                     ##开启安全通道ssl
/>