Tomcat性能优化方案

你使用过tomcat的话,简单的说就是”内存溢出”. 通常情况下,这种问题出现在实际的生产环境中.产生这种问题的原因是tomcat使用较少的内存给进程,通过配置TOmcat的配置文件(Windows 下的catalina.bat或Linux下的catalina.sh)可以解决这种问题.这种解决方法是通过增加JVM的栈内存实现的.也就是说,JVM通常不去调用垃圾回收器,所以服务器可以更多关注处理web请求,并要求尽快完成。要更改文件(catalina.sh) 位于”\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 -XX:PermSize=512m
    -XX:MaxPermSize=512m -XX:+DisableExplicitGC"

-Xms – 指定初始化时化的栈内存
-Xms – 指定初始化时化的栈内存
-Xmx – 指定最大栈内存
在重启你的Tomcat服务器之后,这些配置的更改才会有效。下面将介绍如何处理JRE内存泄漏.

性能表现不佳的另一个主要原因是内存泄漏,正如我之前说过:始终使用最新的tomcat服务器以获得更好的性能和可伸缩性。现在,这句话变成真的。如果我们使用最新的tomcat版本6.0.26及以上就可以解决这个错误,因为它包含了一个监听器来处理JRE和PermGen的内存泄漏。使用的监听器是,

<listener classname="org.apache.catalina.core.JreMemoryLeakPreventionListener">
&#x4F60;&#x53EF;&#x4EE5;&#x5728;server.xml&#x6587;&#x4EF6;&#x4E2D;&#x627E;&#x5230;&#x8FD9;&#x4E2A;&#x76D1;&#x542C;&#x5668;&#x7684;&#x914D;&#x7F6E;&#xFF0C;server.xml&#x4F4D;&#x7F6E;&#x5728;&#x201C;tomcat project folder/conf/server.xml&#x201D;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#xFF0C;&#x6211;&#x4EEC;&#x5C06;&#x770B;&#x770B;&#x5982;&#x4F55;&#x8C03;&#x6574;&#x8FDE;&#x63A5;&#x5C5E;&#x6027;&#x201C;maxThreads&#x201D;&#x3002;
</listener>

线程池指定Web请求负载的数量,因此,为获得更好的性能这部分应小心处理。可以通过调整连接器属性”maxThreads”完成设置。maxThreads的值应该根据流量的大小,如果值过低,将有没有足够的线程来处理所有的请求,请求将进入等待状态,只有当一个的处理线程释放后才被处理;如果设置的太大,Tomcat的启动将花费更多时间。因此它取决于我们给maxThreads设置一个正确的值。

<connector 2 3 4 5 port="8080" address="localhost" maxthreads="250" maxhttpheadersize="8192" emptysessionpath="true" protocol="HTTP/1.1" enablelookups="false" redirectport="8181" acceptcount="100" connectiontimeout="20000" disableuploadtimeout="true">
&#x5728;&#x4E0A;&#x8FF0;&#x914D;&#x7F6E;&#x4E2D;&#xFF0C;maxThreads&#x503C;&#x8BBE;&#x5B9A;&#x4E3A;&#x201C;250&#x201D;&#xFF0C;&#x8FD9;&#x6307;&#x5B9A;&#x53EF;&#x4EE5;&#x7531;&#x670D;&#x52A1;&#x5668;&#x5904;&#x7406;&#x7684;&#x5E76;&#x53D1;&#x8BF7;&#x6C42;&#x7684;&#x6700;&#x5927;&#x6570;&#x91CF;&#x3002;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x6307;&#x5B9A;&#xFF0C;&#x8FD9;&#x4E2A;&#x5C5E;&#x6027;&#x7684;&#x9ED8;&#x8BA4;&#x503C;&#x4E3A;&#x201C;200&#x201D;&#x3002;&#x4EFB;&#x4F55;&#x591A;&#x51FA;&#x7684;&#x5E76;&#x53D1;&#x8BF7;&#x6C42;&#x5C06;&#x6536;&#x5230;&#x201C;&#x62D2;&#x7EDD;&#x8FDE;&#x63A5;&#x201D;&#x7684;&#x9519;&#x8BEF;&#x63D0;&#x793A;&#xFF0C;&#x76F4;&#x5230;&#x53E6;&#x4E00;&#x4E2A;&#x5904;&#x7406;&#x8BF7;&#x6C42;&#x8FDB;&#x7A0B;&#x88AB;&#x91CA;&#x653E;&#x3002;&#x9519;&#x8BEF;&#x770B;&#x8D77;&#x6765;&#x5982;&#x4E0B;&#xFF0C;
[java] view plain copy
org.apache.tomcat.util.threads.ThreadPool logFull SEVERE: All threads (250) are
currently busy, waiting. Increase maxThreads (250) or check the servlet status
&#x5982;&#x679C;&#x5E94;&#x7528;&#x63D0;&#x793A;&#x4E0A;&#x8FF0;&#x9519;&#x8BEF;&#xFF0C;&#x52A1;&#x5FC5;&#x68C0;&#x67E5;&#x4E0A;&#x8FF0;&#x9519;&#x8BEF;&#x662F;&#x5426;&#x662F;&#x7531;&#x4E8E;&#x5355;&#x4E2A;&#x8BF7;&#x6C42;&#x82B1;&#x8D39;&#x592A;&#x957F;&#x65F6;&#x95F4;&#x9020;&#x6210;&#x7684;&#xFF0C;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x7684;&#x539F;&#x56E0;&#x662F;&#x8FD9;&#x6837;&#x7684;&#xFF0C;&#x6709;&#x65F6;&#x5019;&#x5982;&#x679C;&#x6570;&#x636E;&#x5E93;&#x8FDE;&#x63A5;&#x4E0D;&#x91CA;&#x653E;&#x7684;&#x8BDD;&#xFF0C;&#x8FDB;&#x7A0B;&#x5C06;&#x4E0D;&#x4F1A;&#x5904;&#x7406;&#x5176;&#x5B83;&#x8BF7;&#x6C42;&#x3002;
&#x6CE8;&#x610F;: &#x5982;&#x679C;&#x8BF7;&#x6C42;&#x7684;&#x6570;&#x91CF;&#x8D85;&#x8FC7;&#x4E86;&#x201C;750&#x201D;&#xFF0C;&#x8FD9;&#x5C06;&#x4E0D;&#x662F;&#x610F;&#x5473;&#x7740;&#x5C06;maxThreads&#x5C5E;&#x6027;&#x503C;&#x8BBE;&#x7F6E;&#x4E3A;&#x201C;750&#x201D;&#xFF0C;&#x5B83;&#x610F;&#x5916;&#x7740;&#x6700;&#x597D;&#x4F7F;&#x7528;&#x201C;Tomcat&#x96C6;&#x7FA4;&#x201D;&#x7684;&#x591A;&#x4E2A;&#x5B9E;&#x4F8B;&#x3002;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#xFF0C;&#x5982;&#x679C;&#x6709;&#x201C;1000&#x201D;&#x8BF7;&#x6C42;&#xFF0C;&#x4E24;&#x4E2A;Tomcat&#x5B9E;&#x4F8B;&#x8BBE;&#x7F6E;&#x201C;maxThreads= 500&#x201D;&#xFF0C;&#x800C;&#x4E0D;&#x5728;&#x5355;Tomcat&#x5B9E;&#x4F8B;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x8BBE;&#x7F6E;maxThreads=1000&#x3002;

&#x6839;&#x636E;&#x6211;&#x7684;&#x7ECF;&#x9A8C;&#xFF0C;&#x51C6;&#x786E;&#x503C;&#x7684;&#x8BBE;&#x5B9A;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5C06;&#x5E94;&#x7528;&#x5728;&#x5728;&#x5404;&#x79CD;&#x73AF;&#x5883;&#x4E2D;&#x6D4B;&#x8BD5;&#x5F97;&#x51FA;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#xFF0C;&#x6211;&#x4EEC;&#x6765;&#x770B;&#x770B;&#x5982;&#x4F55;&#x538B;&#x7F29;&#x7684;MIME&#x7C7B;&#x578B;&#x3002;
</connector>
Tomcat&#x6709;&#x4E00;&#x4E2A;&#x901A;&#x8FC7;&#x5728;server.xml&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x4E2D;&#x8BBE;&#x7F6E;&#x538B;&#x7F29;&#x7684;&#x9009;&#x9879;&#x3002;&#x538B;&#x7F29;&#x53EF;&#x4EE5;&#x5728;connector&#x50CF;&#x5982;&#x4E0B;&#x8BBE;&#x7F6E;&#x4E2D;&#x5B8C;&#x6210;&#xFF0C;
[html] view plain copy
1   <connector 2 3 4 port="8080" protocol="HTTP/1.1" connectiontimeout="20000" redirectport="8181" compression="500" compressablemimetype="text/html,text/xml,text/plain,application/octet-stream">
&#x5728;&#x524D;&#x9762;&#x7684;&#x914D;&#x7F6E;&#x4E2D;&#xFF0C;&#x5F53;&#x6587;&#x4EF6;&#x7684;&#x5927;&#x5C0F;&#x5927;&#x4E8E;&#x7B49;&#x4E8E;500bytes&#x65F6;&#x624D;&#x4F1A;&#x538B;&#x7F29;&#x3002;&#x5982;&#x679C;&#x5F53;&#x6587;&#x4EF6;&#x8FBE;&#x5230;&#x4E86;&#x5927;&#x5C0F;&#x4F46;&#x662F;&#x5374;&#x6CA1;&#x6709;&#x88AB;&#x538B;&#x7F29;&#xFF0C;&#x90A3;&#x4E48;&#x8BBE;&#x7F6E;&#x5C5E;&#x6027;compression="on"&#x3002;&#x5426;&#x5219;Tomcat&#x9ED8;&#x8BA4;&#x8BBE;&#x7F6E;&#x662F;&#x201C;off&#x201D;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x6211;&#x4EEC;&#x5C06;&#x770B;&#x770B;&#x5982;&#x4F55;&#x8C03;&#x4F18;&#x6570;&#x636E;&#x5E93;&#x3002;
</connector>

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

Tomcat的原生库基于Apache可移植运行时(Apache Portable Runtime简称APR),给程序员提供了超强的扩展性和性能,在产品运作中帮助融合原生的服务器技术以展现最佳的性能

这些选项是:
开启浏览器的缓存,这样读取存放在webapps文件夹里的静态内容会更快,大大推动整体性能。
每当开机时,Tomcat服务器应当自动地重启。
一般情况下HTTPS请求会比HTTP请求慢。如果你想要更好的安全性,即使慢一点我们还是要选择HTTPS。

原理简介

HTTP 压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求服务器对应资源后,从服务器端将资源文件压缩,再输出到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的浏览过程HTML ,CSS,Javascript , Text ,它可以节省40%左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP , JSP , ASP , Servlet,SHTML等输出的网页也能进行压缩,压缩效率也很高。

配置方法

Tomcat5.0以后的版本是支持对输出内容进行压缩的,使用的是gzip压缩格式 。

修改%TOMCAT_HOME%/conf/server.xml,修订节点如下:

<connector port="80" protocol="HTTP/1.1" connectiontimeout="20000" redirectport="8443" executor="tomcatThreadPool" uriencoding="utf-8" compression="on" compressionminsize="50" nocompressionuseragents="gozilla, traviata" compressablemimetype="text/html,text/xml,text/javascript,text/css,text/plain">
&#x3000;&#x3000;
&#x3000;&#x3000;&#x4ECE;&#x4E0A;&#x9762;&#x8282;&#x70B9;&#x7684;&#x5C5E;&#x6027;&#x53EF;&#x4EE5;&#x770B;&#x51FA;&#xFF0C;&#x8981;&#x4F7F;&#x7528;gzip&#x538B;&#x7F29;&#x529F;&#x80FD;&#xFF0C;&#x4F60;&#x9700;&#x8981;&#x5728;Connector&#x8282;&#x70B9;&#x4E2D;&#x52A0;&#x4E0A;&#x5982;&#x4E0B;&#x5C5E;&#x6027;
- compression="on" &#x6253;&#x5F00;&#x538B;&#x7F29;&#x529F;&#x80FD;
- compressionMinSize="50" &#x542F;&#x7528;&#x538B;&#x7F29;&#x7684;&#x8F93;&#x51FA;&#x5185;&#x5BB9;&#x5927;&#x5C0F;&#xFF0C;&#x9ED8;&#x8BA4;&#x4E3A;2KB
- noCompressionUserAgents="gozilla, traviata" &#x5BF9;&#x4E8E;&#x4EE5;&#x4E0B;&#x7684;&#x6D4F;&#x89C8;&#x5668;&#xFF0C;&#x4E0D;&#x542F;&#x7528;&#x538B;&#x7F29;
- compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"&#x3000;&#x54EA;&#x4E9B;&#x8D44;&#x6E90;&#x7C7B;&#x578B;&#x9700;&#x8981;&#x538B;&#x7F29;
</connector>

测试方法

启用了TOMCAT这个压缩功能后,我们如何来测试压缩是否有效呢?
首先Tomcat是根据浏览器请求头中的accept-encoding来判断浏览器是否支持压缩功能,如果这个值包含有gzip,就表明浏览器支持gzip压缩内容的浏览,我们可以用两种方法来验证压缩是否生效。
大家直接通过浏览器访问启用了压缩配置的服务器,然后通过抓包工具查看抓到的数据包,如果内容有很多你看不懂,就说明已经启用压缩功能了。

Original: https://www.cnblogs.com/baishuchao/p/9855788.html
Author: baishuchao
Title: Tomcat性能优化方案

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/685050/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球