最近业务服务器出现了一些问题,Nginx傲娇了,准备把加Nginx插件上的一些处理逻辑扔到后端的Tomcat的业务处理里面去,考虑到tomcat目前本来就压力山大,所以弄了弄apr库来优化tomcat的并发能力。(虽然不是很懂具体原理,不过并发能力确实得到了提高~\(≧▽≦)/~)
      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

安装步骤:
   下载包 
    到http://apr.apache.org/下载下面3个包 
    apr,apr-iconv,apr,
    或者这里apr-1.5.0.tar.gz.rarapr-iconv-1.2.1.tar.gz.rarapr-util-1.5.3.tar.gz.rar    因为上传文件类型的限制,去掉后面的.rar就ok了

开始安装~
    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 
    此时环境变量生效果

6)修改server.xml
    配置文件中protocol修改成org.apache.coyote.http11.Http11AprProtocol

重启Tomcat,看到
    Aug 29, 2010 3:47:32 PM org.apache.catalina.core.AprLifecycleListener init 
    INFO: Loaded APR based Apache Tomcat Native library 1.1.20. 
    即可,在最后的端口信息方面也可以看到http-apr-8080

PS:可能会出现SSL的错误,这个是加密连接的配置,如果tomcat处理的业务没有使用SSL(利用Https来连接)的话,设置

效果:
    对于这几种模式,我用ab命令模拟1000并发测试10000次,测试结果比较意外,为了确认结果,我每种方式反复测试了10多次,并且在两个服务器上都测试了一遍。结果发现Bio和Nio性能差别不大。但是采用apr,连接建立的速度会有50%~100%的提升。
    业务上的话,tomcat的数量减少了40%

再PS:由于我们采用了linux服务器,所以优化内核参数也是一个非常重要的工作。给一个参考的优化参数:

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

  1. net.core.netdev_max_backlog = 32768
  2. net.core.somaxconn = 32768
  3. net.core.wmem_default = 8388608
  4. net.core.rmem_default = 8388608
  5. net.core.rmem_max = 16777216
  6. net.core.wmem_max = 16777216
  7. net.ipv4.ip_local_port_range = 1024 65000
  8. net.ipv4.route.gc_timeout = 100
  9. net.ipv4.tcp_fin_timeout = 30
  10. net.ipv4.tcp_keepalive_time = 1200
  11. net.ipv4.tcp_timestamps = 0
  12. net.ipv4.tcp_synack_retries = 2
  13. net.ipv4.tcp_syn_retries = 2
  14. net.ipv4.tcp_tw_recycle = 1
  15. net.ipv4.tcp_tw_reuse = 1
  16. net.ipv4.tcp_mem = 94500000 915000000 927000000
  17. net.ipv4.tcp_max_orphans = 3276800
  18. net.ipv4.tcp_max_syn_backlog = 65536

保存退出,执行sysctl -p生效

Tomcat 使用apr优化的更多相关文章

  1. tomcat安装apr优化

    APR是apache的一个linux操作系统级优化库,可以在tomcat中使用操作系统级native调用大大提高并发处理效率 先安装前置依赖: yum install -y apr-devel ope ...

  2. Tomcat配置与优化(内存、并发、管理)与性能监控

    原文链接:http://blog.csdn.net/xyang81/article/details/51530979 一.JVM内存配置优化 在开发当中,当一个项目比较大时,依赖的jar包通常比较多, ...

  3. 【Tomcat】性能优化

    一.JVM优化 1.内存优化. 2.垃圾回收策略优化. 二.server.xml的connector优化(connector是与HTTP请求处理相关的容器,三个容器的初始化顺序为:Server-> ...

  4. Tomcat 配置及优化

    Tomcat配置优化,主要在于优化tomcat运行模式,并发参数和线程数, 以及jvm堆内存和垃圾回收相关参数的优化.下面将逐一介绍. 1. tomcat的3种运行模式 1.1 BIO - 同步阻塞I ...

  5. CentOS7下配置Tomcat以APR模式+Tomcat Native运行

    在慢速网络上Tomcat线程数开到300以上的水平,不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待.但是配上APR之后,Tomcat将以JNI的形式调用Apache HTTP服务器的 ...

  6. 转载--tomcat整合apr

    原文地址: http://zhaosheng.wolf.blog.163.com/blog/static/115304589201212845341723/ APR(Apache Portable R ...

  7. Tomcat 内存与优化篇

    Tomcat 内存与优化一.Tomcat 运行环境介绍 1.Tomcat 本身无法直接在计算机上运行,需要依赖硬件基础上的操作系统和Java虚拟机: 2.Java 程序启动时JVM都会分配一个初始内存 ...

  8. Nginx与Tomcat/PHP架构优化的技术分享

    PHP性能优化 一般我们是在/usr/local/php5/etc/php-fpm.conf这个文件里面进行相应的配置. 1)       如果设置成static,php-fpm进程数自始至终都是pm ...

  9. 浅谈tomcat中间件的优化【转】

    今天来总结一下tomcat的一些优化的方案,由于本人才疏学浅,写的不好,勿喷! tomcat对于大多数从事开发工作的童鞋应该不会很陌生,通常做为默认的开发环境来为大家服务,不过tomcat默认的一些配 ...

随机推荐

  1. 新版Chrome自动禁用第三方插件的解决办法[转]

    原文地址:http://www.douban.com/note/375734834/?type=like Chrome的新策略里面禁用了除chrome web store下载的所有第三方扩展,这个很烦 ...

  2. iOS 通过 JSPatch 实时修复线上 bug!

    JSPatch 是一个开源项目(Github链接),只需要在项目里引入极小的引擎文件,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,替换任意 Objective-C ...

  3. Fedora10下建立linux系统的窗口没有地址栏

    Fedora10下建立的linux系统窗口没有地址栏 打开一个文件夹就打开一个窗口,还没有地址栏,这很麻烦也不习惯. 另:打开地址栏可以用组合键 Ctrl+L 如图 解决: edit---perfer ...

  4. 转帖不会乱码的,powershell网络蜘蛛

    抓取(爬取)网上信息的脚本程序,俗称网络蜘蛛.powershell中自带了这样的两个命令,[Invoke-WebRequest]和[Invoke-RestMethod],但这两个命令有时候会乱码. 现 ...

  5. json对象转换为json字符串

    今天浏览网页的时候看到这个题也是一道很经典的题目了 var str ='aaaaaaajsdjdfkdkg'; ,]; var obj={}; ;i<str.length;i++){ if(!o ...

  6. Android 生成颜色器

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  7. php-eclipse乱码处理

    方法一:1)设置"eclipse目录下eclipse.ini文件"2)在文件结尾添加"-Dfile.encoding=UTF-8".3)重新启动eclipse, ...

  8. linux命令:whereis

    1.命令介绍: whereis用来查找二进制文件,源代码文件和帮助说明文件,whereis是在系统的数据库文件中查找,所以速度非常快,但是系统的文件数据库不是实时更新的,默认一个星期更新一次. 2.命 ...

  9. SVN小贴士

    我辛辛苦苦写的到哪里了? SVN小贴士SVN服务器上的代码项目组公用,你的每一个提交都会体现给项目组每个人,所以提交要慎重,要注意避免代码冲突,使用SVN小贴士: 1.提前宣布开发计划,保持项目组成员 ...

  10. Sprint第二个冲刺(第十天)

    一.Sprint 计划会议: 现在总结一下情况,正在做的3个功能的完成程度已经达到了80%,过几天就可以完成了.也把之前做的修改界面放入fragment中,方便修改管理.效果图如下: 二.Sprint ...