• Tomcat+apr+native应对高并发


    APR包

    链接:https://pan.baidu.com/s/1nvC9UYy2rzhtArQOkNEF4w 
    提取码:xjmj

     

    一、三种运行模式介绍

    Tomcat 有三种(bio,nio.apr) 运行模式,首先来简单介绍下

     

    bio

    bio(blocking I/O),顾名思义,即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。Tomcat在默认情况下,就是以bio模式运行的。遗憾的是,就一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。

     

    nio

    是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。

    想运行在该模式下,直接修改server.xml里的Connector节点,修改protocol为

     
    1. <Connector port="80" protocol="org.apache.coyote.http11.Http11NioProtocol"
    2. connectionTimeout="20000"
    3. URIEncoding="UTF-8"
    4. useBodyEncodingForURI="true"
    5. enableLookups="false"
    6. redirectPort="8443" />
     

    apr

    (Apache Portable Runtime/Apache可移植运行库),是Apache HTTP服务器的支持库。你可以简单地理解为,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。 Tomcat apr也是在Tomcat上运行高并发应用的首选模式。

    要tomcat支持apr,必须要安装apr和native,这样tomcat可以利用apache的apr接口,使用操作系统的部分本地操作,从而提升性能。

    Tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态。

     

    二、linux下配置tomcat+apr+native

     

    安装包准备

    jdk-8u171-linux-x64.tar.gz(必须JDK1.7以上才支持apr)

    apr-1.5.2.tar.gz

    apr-util-1.5.4.tar.gz

    apache-tomcat-8.0.27.tar.gz(解压之后其bin目录下包含tomcat-native的安装包)

     

    安装JDK

    tar xf jdk-8u171-linux-x64.tar.gz -C /usr/local/

    mv /usr/local/jdk1.8.0_171 /usr/local/jdk

    /usr/local/jdk/bin/java -version

     
    1. sed -i.ori '$a export JAVA_HOME=/usr/local/jdk export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar'

    tail -3 /etc/profile

    source /etc/profile

    java -version

     

    安装tomcat

    tar xf apache-tomcat-8.0.27.tar.gz

    mv apache-tomcat-8.0.27 tomcat

    vim /usr/local/tomcat/bin/catalina.sh

     
    1. JAVA_OPTS="-server -Xms1024M -Xmx1024M -XX:PermSize=512M -XX:MaxNewSize=512M -XX:MaxPermSize=512M"
    2. 添加到脚本最上方
     

    修改运行模式

    vim /usr/local/tomcat/conf/server.xml

     
    1. <Service name="Catalina">
    2. 在下方添加
    3. <!-- 配置apr -->
    4. <Connector executor="tomcatThreadPool"
    5. port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
    6. URIEncoding="UTF-8" enableLookups="false" acceptCount="50"
    7. connectionTimeout="1000" maxKeepAliveRequests="250"
    8. redirectPort="8443" />

    image_1ednneld7skmn8913r43kg1iajm.png-38.4kB

     

    server.xml完整的配置(参考)

     
    1. <?xml version='1.0' encoding='utf-8'?>
    2. <Server port="9016" shutdown="SHUTDOWN">
    3. <!--关闭https安全验证 -->
    4. <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
    5. <Listener className="org.apache.catalina.core.JasperListener" />
    6. <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
    7. <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    8. <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
    9. <GlobalNamingResources>
    10. <Resource name="UserDatabase" auth="Container"
    11. type="org.apache.catalina.UserDatabase"
    12. description="User database that can be updated and saved"
    13. factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
    14. pathname="conf/tomcat-users.xml" />
    15. </GlobalNamingResources>
    16. <Service name="Catalina">
    17. <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    18. <!-- 配置线程 -->
    19. <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
    20. maxThreads="500" minSpareThreads="25"
    21. maxIdleTime="4000"
    22. />
    23. <!-- 配置apr -->
    24. <Connector executor="tomcatThreadPool"
    25. port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
    26. URIEncoding="UTF-8" enableLookups="false" acceptCount="50"
    27. connectionTimeout="1000" maxKeepAliveRequests="250"
    28. redirectPort="8443" />
    29. <Connector port="9109" protocol="AJP/1.3" redirectPort="8443" />
    30. <Engine name="Catalina" defaultHost="localhost">
    31. <Realm className="org.apache.catalina.realm.LockOutRealm">
    32. <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
    33. resourceName="UserDatabase"/>
    34. </Realm>
    35. <Host name="localhost" appBase="webapps"
    36. unpackWARs="true" autoDeploy="true">
    37. <!-- 配置访问日志格式 -->
    38. <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    39. prefix="localhost_access_log." suffix=".txt"
    40. pattern="%h %l %u %t "%r" %s %b" />
    41. </Host>
    42. </Engine>
    43. </Service>
    44. </Server>
     

    安装tomcat-native

    cd /usr/local/tomcat/bin

    tar xf tomcat-native.tar.gz

    cd tomcat-native-1.1.33-src/jni/native

    ./configure --with-apr=/usr/local/apr/bin/apr-1-config --with-java-home=/usr/local/jdk && make && make install 
    编译前需要安装apr

     

    安装apr

    需要安装apr-1.5.2.tar.gz和apr-util-1.5.4.tar.gz

    tar -xf apr-1.5.2.tar.gz

    tar xf apr-util-1.5.4.tar.gz

     

    进入到apr-1.5.2,执行

    ./configure --prefix=/usr/local/apr && make && make install

     

    进入到apr-util-1.5.4,执行

    ./configure --with-apr=/usr/local/apr/ --prefix=/usr/local/apr-utils && make && make install

     

    修改最大文件句柄数和打开文件的数目

    vim /etc/sysctl.conf

     
    1. net.ipv4.ip_local_port_range = 10240 65535
    2. net.ipv4.ip_nonlocal_bind = 1

    vim /etc/security/limits.conf

     
    1. 最后一行添加
    2. * soft nofile 65535
    3. * hard nofile 65535
     

    加载bridge模块

    modprobe bridge

    sysctl -p

     

    退出重新登陆(查看修改信息)

    ulimit -a 
    可以看到open files已经由默认的1024变成了65535

     

    启动Tomcat

    /usr/local/tomcat/bin/startup.sh 
    出来下方提示表示配置成功

    image_1ednm9s58v621g3n19f1i0ffgk9.png-35.3kB

     

    三、出错情况处理

     

    启动tomcat时报“The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/local/apr/lib”

    解决方案:确保tomcat-native安装成功,否则执行上面命令,如果依旧不成功,请执行下面步骤

    vim /usr/local/tomcat/bin/catalina.sh

     
    1. CATALINA_OPTS="-Djava.library.path=/usr/local/apr/lib"
     

    安装apr时报‘Neither the JAVA_HOME nor the JRE_HOME environment variable is defined“

    解决方案:这是未设置环境JAVA_HOME与JAVA_JRE目录,请确保安装jdk成功,确认/etc/profile环境变量配置正确

     

    在执行sysctl -p的时候发现输出出现以下错误

     
    1. net.ipv4.ip_forward = 0
    2. net.ipv4.conf.default.rp_filter = 1
    3. net.ipv4.conf.default.accept_source_route = 0
    4. kernel.sysrq = 0
    5. kernel.core_uses_pid = 1
    6. net.ipv4.tcp_syncookies = 1
    7. error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
    8. error: "net.bridge.bridge-nf-call-iptables" is an unknown key
    9. error: "net.bridge.bridge-nf-call-arptables" is an unknown key
    10. kernel.msgmnb = 65536
    11. kernel.msgmax = 65536
    12. kernel.shmmax = 68719476736
    13. kernel.shmall = 4294967296

    原因:上面有3个参数依赖于bridge模块,该模块如果没有加载则会现上面的输出错误

    解决方案:执行modprobe bridge命令,加载bridge模块

  • 相关阅读:
    熊逸吴军武志红万维钢薛兆丰等得到专栏书34本,5星1本,4星12本
    2星|罗大伦《道德经说什么》:比熊逸《道可道》李零《人往低处走》差很多
    樊登力荐的《道德经说什么》,比熊逸《道可道》差两颗星
    Mysql授权允许远程访问解决Navicat for MySQL连接mysql提示客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端
    使用Vue-cli 脚手架生成的项目使用Vetur+ Prettier + ESlint的配置设置代码规范和格式
    URL中的hash(井号)
    Redis集群的部署
    Redis用作分布式锁
    Redis 概述安装
    简单的Asp.net core管道模拟
  • 原文地址:https://www.cnblogs.com/linyaonie/p/13354339.html
Copyright © 2020-2023  润新知