tomcat

一  Tomcat调优

      本节主要参考文章:https://www.cnblogs.com/jpfss/p/7390211.html

      GZIP压缩参考文章:https://www.cnblogs.com/DDgougou/p/8675504.html

      1.  JVM调优

           注:JDK调优在Tomcat里调而不需要在JDK里调优,Tomcat启动的是JVM的一个实

                  例,而JDK本身没有提供我们调优的地方。

     文件: \tomcat server folder\bin\catalina.sh

JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8
-server -Xms1024m -Xmx1024m
-XX:NewSize=512m -XX:MaxNewSize=512m -XXermSize=512m
-XX:MaxPermSize=512m -XX:+DisableExplicitGC"

      2.  设置监听器解决JRE和PermGen的内存泄漏

           性能表现不佳的另一个主要原因是内存泄漏,正如我之前说过:始终使用最新的

           tomcat服务器以获得更好的性能和可伸缩性。现在,这句话变成真的。如果我们使用

           最新的tomcat版本6.0.26及以上就可以解决这个错误,因为它包含了一个监听器来处

           理JRE和PermGen的内存泄漏。设置使用的监听器是server.xml中的:

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

      3.  连接池设置

           线程池指定Web请求负载的数量,因此,为获得更好的性能这部分应小心处理。可以

           通过调整连接器属性“maxThreads”完成设置。maxThreads的值应该根据流量的大小,

           如果值过低,将有没有足够的线程来处理所有的请求,请求将进入等待状态,只有当

           一个的处理线程释放后才被处理;如果设置的太大,Tomcat的启动将花费更多时间。

           因此它取决于我们给maxThreads设置一个正确的值。 

<Connector port="8080" address="localhost"
maxThreads="250" maxHttpHeaderSize="8192"
emptySessionPath="true" protocol="HTTP/1.1"
enableLookups="false" redirectPort="8181" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />

           在上述配置中,maxThreads值设定为“250”,这指定可以由服务器处理的并发请求的

           最大数量。如果没有指定,这个属性的默认值为“200”。任何多出的并发请求将收到

           “拒绝连接”的错误提示,直到另一个处理请求进程被释放。错误看起来如下,

org.apache.tomcat.util.threads.ThreadPool logFull SEVERE: All threads (250) are
currently busy, waiting. Increase maxThreads (250) or check the servlet status

           如果应用提示上述错误,务必检查上述错误是否是由于单个请求花费太长时间造成的,

           这个问题的原因是这样的,有时候如果数据库连接不释放的话,进程将不会处理其它请

           求。

           注意:如果请求的数量超过了“750”,这将不是意味着将maxThreads属性值设置为“750”,

                     它意外着最好使用“Tomcat集群”的多个实例。也就是说,如果有“1000”请求,两个

                     Tomcat实例设置“maxThreads= 500”,而不在单Tomcat实例的情况下设置

                     maxThreads=1000

      4.  配置压缩

         (1)为什么要压缩?

                          HTTP压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求服务器对应资

                   源后,从服务器端将资源文件压缩,再输出到客户端,由客户端的浏览器负责解压缩并

                   浏览(可见,压缩的是响应)。即:通过减小HTTP响应大小来减少响应时间。相对于普

                   通的浏览过程HTML、CSS、Javascript、Text ,它可以节省40%左右的流量。更为重要

                   的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet、SHTML等输出的网

                   页也能进行压缩,压缩效率也很高。而GZIP本身就是一种网络流压缩算法,而且应用相

                   当广泛Tomcat有一个通过在server.xml配置文件中设置压缩的选项。压缩可以在

                   Connector像如下设置中完成。

         (2)GZIP压缩介绍:

                 (a)HTTP 协议支持GZIP 压缩机制,也称协议压缩。 HTTP GZIP压缩是由WEB服务器

                          和浏览器共同遵守的协议,也就是说WEB服务器和浏览器都必须遵守。目前主流的

                          服务器和浏览器都支持GZIP压缩技术。包括 Chrome、IE、FireFox、Opera 等;服

                          务器有 tomcat、Apache 和 IIS 等。

                 (b)GZIP 主要用来压缩html,css,javascript,等静态文本文件,也支持对动态生成的,包

                       括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩。

                 (c)GZIP 压缩的比率通常在3~10 倍之间,这样可以大大节省服务器的网络带宽,大大

                          提升浏览器的浏览速度。

                 (d)GZIP 是一种数据压缩格式,默认且目前仅使用deflate算法压缩data部分;deflate是

                          一种压缩算法,是huffman编码的一种加强。

                 (e)协议压缩就是依据HTTP协议进行压缩,不需要程序员进行压缩,解压编码,而是把

                          压缩过程交给WEB服务器,将解压过程交给客户端。 如果客户端为支持GZIP压缩的

                          浏览器,那么解压过程也不需要程序员参与,浏览器会按照一定的规则自动进行解压

                          缩;如果客户端为HttpClient ,那么就需要手动进行GZIP解码了。

                 (f)压缩过程:客户端发送http请求,如果请求头header中携带

                          Accept-Encoding: gzip,deflate (现在的浏览器一般默认都是这样),那么浏览器的意思

                         是:服务器需要进行GZIP压缩,再看响应内容的类型是否满足服务器配置的需要压缩的

                         类型,如果符合,那么WEB服务器在传输响应内容之前,会对响应内容进行压缩,并

                         在响应头中添加Content-Encoding gzip;如果不符合,那么将不压缩,直接返回。

                 (g) 解压过程:(浏览器)客户端接收到响应,如果响应头中包含

                           Content-Encoding GZIP,那么浏览器会自动将响应内容进行GZIP解压缩,然后再呈

                           现在页面上。如果不包含,那么将直接呈现在页面上。

                 (h)GZIP的缺点。相对于没有进行GZIP的工程来说,使用GZIP要增加服务器压缩的压力

                        (cpu消耗)、客户端解压缩的压力,故而对服务器的配置需求更高。另外压缩也要耗

                          费时间,想占用更小的空间,得到高压缩比率,肯定要牺牲较长的时间;反之,如果

                          时间较为宝贵,要求快速,那么所得的压缩比率一定较小,当然会占用更大的空间了

                        (压缩比率=原内容大小/压缩后大小,压缩比率越大,则表明压缩后占用空间的压缩

                          包越小),这就是物理空间与时间的矛盾。

         (3)笔者的案例

                  最近做了个项目,遇到这么一个问题:服务器返回给客户端的json数据量太大(大概

                  65M),在客户端加载了1分多钟才渲染完毕(当然这加载时间也和本地的下行带宽有关),

                  费时耗流量,用户体验极其不好。后来网上搜优化的方法,就是Http压缩         

         (4)Tomcat中配置的方法

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8181" compression="500"
compressableMimeType="text/html,text/xml,text/plain,application/octet-stream" />

                 在上面的配置中,当文件的大小大于等于500bytes时才会压缩。如果当文件达到了大小但是

                 却没有被压缩,那么设置属性compression="on"。否则Tomcat默认设置是“off”。

      5.  数据库调优

           Tomcat性能在等待数据库查询被执行期间会降低。如今大多数应用程序都是使用可能包含“命名

           查询”的关系型数据库。如果是那样的话,Tomcat会在启动时默认加载命名查询,这个可能会提

           升性能。另一件重要事是确保所有数据库连接正确地关闭。给数据库连接池设置正确值也是十

           分重要的。我所说的值是指Resource要素的最大空闲数(maxIdle),最大连接数

         (maxActive),最大建立连接等待时间(maxWait)属性的值。因为配置依赖与应用要求,我也

           不能在本文指定正确的值。你可以通过调用数据库性能测试来找到正确的值。

      6.  Tomcat的原生库基于Apache可移植运行时(Apache Portable Runtime简称APR),给程

         序员提供了超强的扩展性和性能,在产品运作中帮助融合原生的服务器技术以展现最佳的性能。

         想知道安装说明的朋友请参考Tomcat Native Library – (APR) Installation

      7.  其它选项

          开启浏览器的缓存,这样读取存放在webapps文件夹里的静态内容会更快,大大推动整体性

          能。每当开机时,Tomcat服务器应当自动地重启。一般情况下HTTPS请求会比HTTP请求慢。

          如果你想要更好的安全性,即使慢一点我们还是要选择HTTPS。

Tomcat性能在等待数据库查询被执行期间会降低。如今大多数应用程序都是使用可能包含“命名查询”的关系型数据库。如果是那样的话,Tomcat会在启动时默认加载命名查询,这个可能会提升性能。另一件重要事是确保所有数据库连接正确地关闭。给数据库连接池设置正确值也是十分重要的。我所说的值是指Resource要素的最大空闲数(maxIdle),最大连接数(maxActive),最大建立连接等待时间(maxWait)属性的值。因为配置依赖与应用要求,我也不能在本文指定正确的值。你可以通过调用数据库性能测试来找到正确的值。

posted @ 2019-05-28 19:00  jialanshun  阅读(142)  评论(0编辑  收藏  举报