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

1. 服务器资源

  • 对于高并发情况下会有大量的运算,那么CPU的速度会直接影响到处理速度。
  • 内存在大量数据处理的情况下,将会有较大的内存容量需求,可以用-Xmx -Xms -XX:MaxPermSize等参数对内存不同功能块进行划分。我们之前就遇到过内存分配不足,导致虚拟机一直处于full GC,从而导致处理能力严重下降。

2. 开启内容压缩

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

3. 采用集群

单个服务器性能总是有限的,最好的办法自然是实现横向扩展,那么组建tomcat集群是有效提升性能的手段。

我们还是采用了Nginx来作为请求分流的服务器,后端多个tomcat协同工作。

4. 优化tomcat参数

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

<Connector port="8080"        protocol="org.apache.coyote.http11.Http11NioProtocol"        executor="tomcatThreadPool"        compression="on"        compressionMinSize="2048"        maxThreads="30000" <!--这个要看服务器内存多大了-->        minSpareThreads="100"        maxSpareThreads="2048"        enableLookups="false"        redirectPort="8443"        acceptCount="35000"        debug="0"        connectionTimeout="40000"        disableUploadTimeout="true" URIEncoding="UTF-8" useBodyEncodingForURI="true" />

Tomcat连接器池

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="1000" minSpareThreads="350" />

线程池名:           name="tomcatThreadPool"

线程前缀:           namePrefix="catalina-exec-"

最大产生线程数:maxThreads="1000"

最小初始现程数:minSpareThreads="350"

5. 改用APR库

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

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

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

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

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

6. 优化网络

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

修改/etc/sysctl.cnf文件,在最后追加如下内容:

net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 65536 

7. 让测试说话

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

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

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

--------------------------------------------------------↓------tomcat7.0.8的高级应用-apr1.4.2安装------↓-------------------------------------------------------------------

一 windows下安装 
直接拷贝tcnative-1.dll到TOMCAT_HOME/bin目录下,启动即可 
下载地址 http://archive.apache.org/dist/tomcat/tomcat-connectors/native/

二 linux centos4.8或者ubuntu10.10 server安装 
1.下载包 
到http://apr.apache.org/下载下面3个包 
apr-1.4.2.tar.gz 
apr-iconv-1.2.1.tar.gz 
apr-util-1.3.10.tar.gz 
java版本jdk-6u23-linux-x64-rpm.bin 
tomcat版本apache-tomcat-7.0.8.tar.gz

三 安装JDK,tomcat 
安装JDK并设置环境变量 
vi /etc/profile #在他文件末尾处添加下面的变量 
# java 
JAVA_HOME=/usr/java/jdk1.6.0_23 
PATH=$JAVA_HOME/bin:$PATH 
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
export JAVA_HOME 
export PATH 
export CLASSPATH 
执行 
source /etc/profile 
此时环境变量生效果

apache-tomcat-7.0.8.tar.gz解压缩到/usr/local/下面

四 安装apr插件 
1)安装apr 
tar zxvf apr-1.4.2.tar 
cd apr-1.4.2 
./configure --prefix=/usr/local/apr 
make 
make install

2)安装apr-iconv 
程序代码 
tar -zxvf apr-iconv-1.2.1.tar.gz 
cd apr-iconv-1.2.1 
./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr 
make 
make install

3)安装apr-util 
程序代码 
tar zxvf apr-util-1.3.10.tar.gz 
cd apr-util-1.3.10 
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv 
make 
make install

4)安装tomcat-native 
程序代码 
tar zxvf tomcat-native-1.1.20-src.tar.gz 
cd tomcat-native-1.1.20-src/jni/native   
./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk1.6.0_23 
make 
make install

5)添加环境变量 
vi /etc/profile #在他文件末尾处添加下面的变量 
# apr 
export LD_LIBRARY_PATH=/usr/local/apr/lib 
执行 
source /etc/profile 
此时环境变量生效果

启动tomcat 
TOMCAT_HOME/bin/start.sh 
more TOMCAT_HOME/logs/catalina.out

即可看到 
Aug 29, 2010 3:47:32 PM org.apache.catalina.core.AprLifecycleListener init 
INFO: Loaded APR based Apache Tomcat Native library 1.1.20. 
优化完成

时间: 2024-09-30 00:34:53

【技巧】Tomcat生产服务器性能优化的相关文章

Tomcat 生产服务器性能优化

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

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