Tomcat 生产服务器性能优化

虑一下这种场景,你开发了一个应用,它有十分优秀的布局设计,最新的特性以及其它的优秀特点。但是在性能这方面欠缺,不管这个应用如何都会遭到客户拒绝。客户总是期望它们的应用应该有更好的性能。如果你在产品中使用了Tomcat服务器,那么这篇文章就会给你几方面来提升Tomcat服务器的性能。感谢ITWorld article给本文提供资源。经过沉思我已经知道了和早期版本相比最新的Tomcat提供更好的性能和稳定性。所以一直使用最新的Tomcat版本。现在本文使用下面几步来提高Tomcat服务器的性能。

  1. 增加JVM堆内存大小
  2. 修复JRE内存泄漏
  3. 线程池设置
  4. 压缩
  5. 数据库性能调优
  6. Tomcat本地库
  7. 其它选项

Lesus
翻译于 1年前

5人顶

 翻译的不错哦!

其它翻译版本(1)

第一步  – 提高JVM栈内存Increase JVM heap memory

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

?


1

2

3

4

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

MtrS
翻译于 1年前

2人顶

 翻译的不错哦!

其它翻译版本(1)

第二步 – 解决JRE内存泄露

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

?


1

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

你可以在server.xml文件中找到这个监听器的配置,server.xml位置在“tomcat project folder/conf/server.xml”。接下来,我们将看看如何调整连接属性“maxThreads”。

Garfielt
翻译于 1年前

2人顶

 翻译的不错哦!

其它翻译版本(1)

第三步 – 线程池设置

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

?


1

2

3

4

5

<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" />

Garfielt
翻译于 1年前

1人顶

 翻译的不错哦!

在上述配置中,maxThreads值设定为“250”,这指定可以由服务器处理的并发请求的最大数量。如果没有指定,这个属性的默认值为“200”。任何多出的并发请求将收到“拒绝连接”的错误提示,直到另一个处理请求进程被释放。错误看起来如下,

?


1

2

org.apache.tomcat.util.threads.ThreadPool logFull SEVERE: All threads (250) are

currently busy, waiting. Increase maxThreads (250) or check the servlet status

如果应用提示上述错误,务必检查上述错误是否是由于单个请求花费太长时间造成的,这个问题的原因是这样的,有时候如果数据库连接不释放的话,进程将不会处理其它请求。

Garfielt
翻译于 1年前

1人顶

 翻译的不错哦!


注意: 如果请求的数量超过了“750”,这将不是意味着将maxThreads属性值设置为“750”,它意外着最好使用“Tomcat集群”的多个实例。也就是说,如果有“1000”请求,两个Tomcat实例设置“maxThreads= 500”,而不在单Tomcat实例的情况下设置maxThreads=1000。

根据我的经验,准确值的设定可以通过将应用在在各种环境中测试得出。接下来,我们来看看如何压缩的MIME类型。

Garfielt
翻译于 1年前

1人顶

 翻译的不错哦!

其它翻译版本(1)

第4步- 压缩

Tomcat有一个通过在server.xml配置文件中设置压缩的选项。压缩可以在connector像如下设置中完成,

?


1

2

3

4

<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”。接下来我们将看看如何调优数据库。

Lesus
翻译于 1年前

1人顶

 翻译的不错哦!

其它翻译版本(1)

第五步- 数据库性能调优

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

Lesus
翻译于 1年前

1人顶

 翻译的不错哦!

第6步 – Tomcat原生库

Tomcat的原生库基于Apache可移植运行时(Apache Portable Runtime简称APR),给程序员提供了超强的扩展性和性能,在产品运作中帮助融合原生的服务器技术以展现最佳的性能。想知道安装说明的朋友请参考Tomcat Native Library – (APR) Installation

第7步 – 其他选项

这些选项是:

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

就这么多啦。在这篇文章里,我教给了大家一些提高Tomcat服务器性能的方法。如果你觉得这篇文章有用,或者你对提高Tomcat服务器性能有别的看法,请不要忘记留下宝贵的评论。祝你今天编程愉快!

优化tomcat参数

这里以tomcat7的参数配置为例,需要修改conf/server.xml文件,主要是优化连接配置,关闭客户端dns查询。

  1. <Connector port="8080"
  2. protocol="org.apache.coyote.http11.Http11NioProtocol"
  3. connectionTimeout="20000"
  4. redirectPort="8443"
  5. maxThreads="500"
  6. minSpareThreads="20"
  7. acceptCount="100"
  8. disableUploadTimeout="true"
  9. enableLookups="false"
  10. URIEncoding="UTF-8" />

5. 改用APR库

tomcat默认采用的BIO模型,在几百并发下性能会有很严重的下降。tomcat自带还有NIO的模型,另外也可以调用APR的库来实现操作系统级别控制。

NIO模型是内置的,调用很方便,只需要将上面配置文件中protocol修改成org.apache.coyote.http11.Http11NioProtocol,重启即可生效。上面配置我已经改过了,默认的是HTTP/1.1。

APR则需要安装第三方库,在高并发下会让性能有明显提升。具体安装办法可以参考http://www.cnblogs.com/huangjingzhou/articles/2097241.html。安装完成后重启即可生效。如使用默认protocal就是apr,但最好把将protocol修改成org.apache.coyote.http11.Http11AprProtocol,会更加明确。

在官方找到一个表格详细说明了这三种方式的区别:

  1. Java Blocking Connector   Java Nio Blocking Connector   APR/native Connector
  2. BIO                         NIO                       APR
  3. Classname                AjpProtocol               AjpNioProtocol           AjpAprProtocol
  4. Tomcat Version           3.x onwards                 7.x onwards              5.5.x onwards
  5. Support Polling              NO                          YES                       YES
  6. Polling Size                 N/A                   maxConnections             maxConnections
  7. Read Request Headers      Blocking                  Sim Blocking                   Blocking
  8. Read Request Body         Blocking                  Sim Blocking                   Blocking
  9. Write Response            Blocking                  Sim Blocking                   Blocking
  10. Wait for next Request     Blocking                  Non Blocking               Non Blocking
  11. Max Connections        maxConnections              maxConnections             maxConnections

6. 优化网络

Joel也明确提出了优化网卡驱动可以有效提升性能,这个对于集群环境工作的时候尤为重要。由于我们采用了linux服务器,所以优化内核参数也是一个非常重要的工作。给一个参考的优化参数:

  1. 1. 修改/etc/sysctl.cnf文件,在最后追加如下内容:
  2. net.core.netdev_max_backlog = 32768
  3. net.core.somaxconn = 32768
  4. net.core.wmem_default = 8388608
  5. net.core.rmem_default = 8388608
  6. net.core.rmem_max = 16777216
  7. net.core.wmem_max = 16777216
  8. net.ipv4.ip_local_port_range = 1024 65000
  9. net.ipv4.route.gc_timeout = 100
  10. net.ipv4.tcp_fin_timeout = 30
  11. net.ipv4.tcp_keepalive_time = 1200
  12. net.ipv4.tcp_timestamps = 0
  13. net.ipv4.tcp_synack_retries = 2
  14. net.ipv4.tcp_syn_retries = 2
  15. net.ipv4.tcp_tw_recycle = 1
  16. net.ipv4.tcp_tw_reuse = 1
  17. net.ipv4.tcp_mem = 94500000 915000000 927000000
  18. net.ipv4.tcp_max_orphans = 3276800
  19. net.ipv4.tcp_max_syn_backlog = 65536
  20. 2. 保存退出,执行sysctl -p生效

7. 让测试说话

优化系统最忌讳的就是只调优不测试,有时不适当的优化反而会让性能更低。以上所有的优化方法都要在本地进行性能测试过后再不断调整参数,这样最终才能达到最佳的优化效果。

补充Bio、Nio、Apr模式的测试结果:

对于这几种模式,我用ab命令模拟1000并发测试10000词,测试结果比较意外,为了确认结果,我每种方式反复测试了10多次,并且在两个服务器上都测试了一遍。结果发现Bio和Nio性能差别非常微弱,难怪默认居然还是Bio。但是采用apr,连接建立的速度会有50%~100%的提升。直接调用操作系统层果然神速啊,这里强烈推荐apr方式!

时间: 2024-10-26 14:47:56

Tomcat 生产服务器性能优化的相关文章

【技巧】Tomcat生产服务器性能优化

1. 服务器资源 对于高并发情况下会有大量的运算,那么CPU的速度会直接影响到处理速度. 内存在大量数据处理的情况下,将会有较大的内存容量需求,可以用-Xmx -Xms -XX:MaxPermSize等参数对内存不同功能块进行划分.我们之前就遇到过内存分配不足,导致虚拟机一直处于full GC,从而导致处理能力严重下降. 2. 开启内容压缩 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout

JAVA开发之大型互联网企业高并发架构Tomcat服务器性能优化视频教程

课程目标熟练掌握高并发架构Tomcat服务器性能优化. 适用人群对计算机,java开发人员,Java架构师,运维感兴趣的朋友! 课程简介Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人共同开发而成.Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选. Tomc

Tomcat介绍及性能优化

一.Tomcat简单介绍: Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选. 版本介绍:现在版本更新到 Apache Tomcat 8.x,但是Apache Tomcat 7.x是目前开发的焦点.Apache Tomcat 7.x它在汲取了Tomcat 6.0.x优点的基础上,实现了对于Servlet 3.0.JSP 2.2和EL 2.2等特性的支持. 除此以外的改进列表如下:

网站应用服务器性能优化方案总结

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption

Web服务器性能优化

Web 服务器性能与站点访问性能优化思路 要优化 Web 服务器的性能,我们先来看看 Web 服务器在 web 页面处理上的步骤:1.Web 浏览器向一个特定的服务器发出 Web 页面请求;2.Web 服务器接收到 web 页面请求后,寻找所请求的 web 页面,并将所请求的 Web 页面传送给 Web 浏览器;3.Web 浏览器接收到所请求的 web 页面内容,并将它显示出来. 上面三个步骤都关系 Web 服务器,但实际 Web 服务器性能相关最大的是在第 2 步,这里 Web 服务器需要寻找

服务器性能优化

1.度量性能 持续地对性能进行度量在两个方面有帮助.首先,度量可以帮助了解性能趋势,包括好坏两方面的趋势.作为一个简单的方法,查看一下 Web 服务器上的中央处理单元(CPU)使用率,就可以了解 CPU 是否负载过重.同样,查看过去使用的总带宽并推断未来的变化,可以帮助判断什么时候需要进行网络升级.这些度量最好与其他度量和观测结合考虑.例如,当用户抱怨应用程序太慢时,可以检查磁盘操作是否达到了最大容量. 性能度量的第二个用途是,判断调优是对系统性能有帮助,还是使它更糟糕了.方法是比较修改之前和之

Nginx服务器性能优化配置

在大多数情况下,一个常规安装的nginx服务器对你的网站来已经是能很好地工作的了.然而,如果你真的想挤压出nginx的性能,你必须更深入 一些.在这时我们将解释Nginx的那些设置可以微调,以优化在处理大量客户端请求时的性能.需要注意一点的是这不是一个全面的微调指南,而是一个简单的 可以通过微调来提高性能设置的概述.请根据实际情况使用. 基本的 (优化过的)配置 我们这里要修改的唯一文件是nginx.conf,其中包含Nginx不同模块的所有设置.通常情况下你能够在服务器的/etc/nginx目

MySQL服务器性能优化

一:配置文件读取位置,不同系统my.cnf配置文件位置不同. 例如debian位置:/etc/mysql/my.cnf 找到mysqld二进制文件: find   /  -name  mysqld /usr/bin/mysqld   --verbose  --help  | grep  -A 1  "Default options" 二:全局缓存 (key_buffer_size(默认值:384M) innodb_buffer_pool_size innodb_additional_m

生产服务器上优化终端超时以及历史记录数

操作系统:CentOS 生产环境要求不超过6条历史记录,终端超时为6分钟. 操作步骤如下: [[email protected] ~]$ echo "export TMOUT=600" >> /etc/profile -bash: /etc/profile: 权限不够 [[email protected] ~]$ su - root 密码: [[email protected] ~]# echo "exportTMOUT=600">> /et