一 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)属性的值。因为配置依赖与应用要求,我也不能在本文指定正确的值。你可以通过调用数据库性能测试来找到正确的值。
原文:https://www.cnblogs.com/jialanshun/p/10939604.html