Tomcat 生产服务器性能优化

标签: tomcat 生产 服务器 | 发表时间:2013-09-15 10:22 | 作者:
出处:http://www.iteye.com

 

  1. 增加JVM堆(heap)
  2. 解决内存泄漏问题
  3. 线程池(thread pool)的设置
  4. 压缩
  5. 调节数据库性能
  6. Tomcat原生库(native library)
  7. 其他选项
 

第一步  – 提高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 JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF -8
2 -server -Xms 1024 m -Xmx 1024 m
3 -XX:NewSize= 512 m -XX:MaxNewSize= 512 m -XX:PermSize= 512 m
4 -XX:MaxPermSize= 512 m -XX:+DisableExplicitGC"

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

 

第2步 - 解决JRE内存泄漏

另一个影响Tomcat 性能的因素是内存泄露,就像我前面提及的,可以通过更新到最新版本的Tomcat来获得较好性能和可扩展性.现在这句话将成为事实。如果我们使用最新的 tomcat 服务器版本 6.0.26 或更高版本,可以解决此类错误。因为它包含一个{敏感词}来处理 JRE 和 permgen 内存泄漏。这里使用的{敏感词}是,

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

你可以找到上述{敏感词}类配置文件 server.xml 在"tomcat project folder/conf/server.xml"中的。下一步我们将介绍如何调整连接器属性"maxThreads"

 

第三步 – 线程池设置

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

 

 

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

 

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

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

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

 

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

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

 

第4步- 压缩

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

1 <Connector port= "8080"  protocol= "HTTP/1.1"
2 connectionTimeout= "20000"
3 redirectPort= "8181"  compression= "500"
4 compressableMimeType= "text/html,text/xml,text/plain,application/octet-stream"  />
在前面的配置中,当文件的大小大于等于500bytes时才会压缩。如果当文件达到了大小但是却没有被压缩,那么设置属性compression="on"。否则Tomcat默认设置是“off”。接下来我们将看看如何调优数据库。
 

第五步- 数据库性能调优

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

 

第6步 – Tomcat原生库

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

第7步 – 其他选项

这些选项是:

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

     

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



已有 1 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [tomcat 生产 服务器] 推荐:

Tomcat 生产服务器性能优化

- - ITeye博客
增加JVM堆(heap). 线程池(thread pool)的设置. Tomcat原生库(native library). 第一步  – 提高JVM栈内存Increase JVM heap memory. 要更改文件(catalina.sh) 位于"\tomcat server folder\bin\catalina.sh",下面,给出这个文件的配置信息,.

Linux下Apache+Tomcat搭建负载均衡服务器集群

- - 极客521 | 极客521
这篇文章主要讲解关于如何在Linux下搭建Apache+tomcat 负载均衡服务器集群的过程. 负载均衡集群配置(1):Tomcat的配置. 修改“ tomcat/conf/server.xml ”文件. 编辑server.xml文件,找到“ ”元素节点,在server.xml文件里面未注释掉的有两个 元素节点.

Cacti监控Tomcat服务器实现过程

- - CSDN博客系统运维推荐文章
1 首先去官网上面下载通用的监控模板. 一般使用TomcatStats-0.1.zip 模板居多,下载地址:. 在linux服务器上面使用wget下载,wget  http://forums.cacti.net/download/file.php?id=12310,报如下错误:. 正在连接 forums.cacti.net|173.225.179.10|:80... 已连接.

Tomcat服务器顶层结构和启动过程

- - CSDN博客综合推荐文章
号外:2016 最流行的是哪一种 Java 应用服务器呢. 通过从部署的 1240 个 JVM 中得到的数据,我们能够确定出现了 862 个容器供应商,或者说是占到了运行环境的 70% 左右. Tomcat 的安装基数已经连续两年超过排行榜的 50%. 占到总份额的 58.22% 无疑使其成为赢家.

监控Tomcat方案调研(监控应用服务器系列文章一)

- - 博客园_首页
前言: 最近在做一个监控应用服务器(Tocmat、WebSphere、WebLogic)的项目,目前已小有规模,回头看看,一路走来,也算是磕磕绊绊,遇到过种种问题,走过不少弯路,不过程序员最不怕的就是遇到问题——有什么问题就解决什么问题. 为了给后来人留下点经验之谈,助之少走弯路,特意把这些经验整理出来,与大家分享.

nginx tomcat负载均衡,同一服务器下多域名转发

- - ITeye博客
用nginx进行同一个服务器下多域名的负载均衡配置. Nginx进行http负载均衡的模块是upstream. Upstream可以进行多个配置,这样的话可以灵活的配置站点,但是注意的是upstream后面的名字最好是配置成为域名,因为upstream是进行http访问的,一般的解析没有问题,但是如果是ajax的解析就会通过访问upstream后面的名字来进行访问了,这里要注意.

virgo-tomcat-server的生产环境线上配置与管理 - 520_1351

- - 博客园_首页
Virgo Tomcat Server简称VTS,VTS是一个应用服务器,它是轻量级, 模块化, 基于OSGi系统. 与OSGi紧密结合并且可以开发bundles形式的Spring web apps应用. 他们同样拥有OSGi和Spring的特性. VTS由SpringSource 的Spring DM server过渡而来, virgo官网地址: http://www.eclipse.org/virgo.

图文:CentOS 下对 Nginx + Tomcat 配置 SSL 实现服务器 / 客户端双向认证

- - CSDN博客推荐文章
1.1 nginx 包及其依赖包下载. 出于模块的依赖性,Nginx 依赖以下三个包:. gzip 模块需要 zlib 库( http://www.zlib.net/);. rewrite 模块需要 pcre 库( http://www.pcre.org/);. ssl 功能需要 openssl 库( http://www.openssl.org/);.

使用纯java ssh方式连接linux服务器,并用此方式部署war到linux的tomcat下

- - Linux - 操作系统 - ITeye博客
纯java代码使用ssh方式登录linux服务. 实际应用中,可以使用这种方式上传部署web工程war包 并且部署启动tomcat 一个自动化完成所有工作 起到节省时间作用. 1.去 官网下载最新的jar包. 下面是我的java code 例子. /** * java ssh登录linux以后的一些操作方式 * @author liuxy * */ public class SchUnitJsch extends SchUnit{.

tomcat调优

- - 开源软件 - ITeye博客
1          概述. 本文档主要介绍了Tomcat的性能调优的原理和方法. 可作为公司技术人员为客户Tomcat系统调优的技术指南,也可以提供给客户的技术人员作为他们性能调优的指导手册. 2          调优分类. 由于Tomcat的运行依赖于JVM,从虚拟机的角度我们把Tomcat的调整分为外部环境调优和自身调优两类来描述.