记录日常工作关于系统运维,虚拟化云计算,数据库,网络安全等各方面问题。


Tomcat有三种运营模式:bio、nio、apr,不同模式下Tomcat的运行效率差别比较大。

一、bio(blockingIO)

阻塞式IO,Tomcat6及以前版本默认运行模式,性能非常低下,没有经过任何优化处理。
二、nio(noblocking IO)

非阻塞式IO,Tomcat7以后的版本默认运行模式,利用java异步IO技术使Tomcat运行性能有所提升。

    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8543" />


如果要在Tomcat6开启NIO模式,直接修改server.xml里的Connector节点,修改protocol为
org.apache.coyote.http11.Http11NioProtocol,启动生效。

    <Connector port="8080"                protocol="org.apache.coyote.http11.Http11NioProtocol"
                   connectionTimeout="20000"
                   redirectPort="8543" />


三、apr(Apache Portable Runtime)

从操作系统级别来解决异步的IO问题,大幅度的提高性能。

必须要安装apr和native,直接启动就支持apr。


下载 相关最新版软件与安装编译环境。

  231  wget http://us.mirrors.quenda.co/apache//apr/apr-1.7.0.tar.gz
  232  wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
  233  wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-iconv-1.2.2.tar.gz
  234  yum install gcc make  gcc-c++

  242  yum install gcc make autoconf automake
  243  yum install expat-devel


首先需要升级openssl,不然tomcat不支持,无法启动。

  424  tar zxvf openssl-1.1.0k.tar.gz
  425  cd openssl-1.1.0k
  428  ./config --prefix=/usr/local/openssl-1.1.0k  shared  zlib-dynamic && make
  429  make install

这里需要单独新装个目录,不然最的启动tomcat 会报错,因为tomcat 在编译tomcat-native 时,使用的是

系统中自带的openssl的中旧库文件。这样启动tomcat时,日志会报错,无法启动,具体如下 :

警告: The APR based Apache Tomcat Native library failed to load. The error reported was [/usr/local/apr/lib/libtcnative-1.so.0.2.23: /usr/local/apr/lib/libtcnative-1.so.0.2.23: undefined symbol: BN_get_rfc3526_prime_8192]
java.lang.UnsatisfiedLinkError: /usr/local/apr/lib/libtcnative-1.so.0.2.23: /usr/local/apr/lib/libtcnative-1.so.0.2.23: undefined symbol: BN_get_rfc3526_prime_8192
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965)
   

严重: Failed to initialize connector [Connector[HTTP/1.1-8080]]
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-8080]]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427)
Caused by: org.apache.catalina.LifecycleException: The configured protocol [org.apache.coyote.http11.Http11AprProtocol] requires the APR/native library which is not available
    at org.apache.catalina.connector.Connector.initInternal(Connector.java:972)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
    ..


使用ldd 查看库文件信息,会发现连接的库信息都是旧版本的
/lib64/libssl.so.10
这都是旧版本的openssl 库文件。

# :  ldd /usr/local/apr/lib/libtcnative-1.so.0.2.10  


linux-vdso.so.1 =>  (0x00007ffd137fa000)
libssl.so.10 => /lib64/libssl.so.10 (0x00007f6efdf31000)
libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007f6efdb48000)
libapr-1.so.0 => /usr/local/apr/lib/libapr-1.so.0 (0x00007f6efd915000)
librt.so.1 => /lib64/librt.so.1 (0x00007f6efd70d000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f6efd4d5000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6efd2b9000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f6efd0b5000)
libc.so.6 => /lib64/libc.so.6 (0x00007f6efccf2000)
libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f6efcaa6000)
libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f6efc7c1000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f6efc5bc000)
libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f6efc38a000)
libz.so.1 => /lib64/libz.so.1 (0x00007f6efc174000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6efe3d0000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f6efbf70000)
libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f6efbd61000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f6efbb5d000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f6efb942000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f6efb71d000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f6efb4bb000)
liblzma.so.5 => /lib64/liblzma.so.5 (0x00007f6efb296000)


    2.1 安装APR

  310  tar zxvf apr-1.7.0.tar.gz
  311  cd apr-1.7.0
  312  ./configure --prefix=/usr   --disable-static  --with-installbuilddir=/usr/share/apr-1/build
  315  make
  316  make install

        安装APR-iconv

  325  cd apr-iconv-1.2.2
  326  ./configure --with-apr=/usr
  327  make
  328  make install

    2.2 安装APR-UTILS

  318  cd apr-util-1.6.1
  320  ./configure --prefix=/usr   --with-apr=/usr   --with-gdbm=/usr   --with-openssl=/usr/local/openssl-1.1.0k --with-crypto --with-apr-iconv=/usr/local/apache2/bin/apriconv

  321  make
  322  make install

  2.3   安装tomcat-native,编译完成就可以了。

  360  tar zxvf tomcat-native.tar.gz
  361  cd tomcat-native-1.2.23-src/native/
  367  ./configure --with-ssl=/usr/local/openssl-1.1.0k

  368  make
  369  make install


3、配置APR本地库到系统共享库搜索路径中

方式1:

设置LD_LIBRARY_PATH和LD_RUN_PATH环境变量,指向/usr/local/apr/lib目录,可配置到/etc/.profile文件中

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib

source /etc/profile


方式2:

拷贝/usr/local/apr/lib目录下所有动态库到/usr/lib或/lib系统共享库搜索目录下即可。

copy /usr/local/apr/lib/libtcnative* /usr/lib/

   

方式3:(推荐)

编辑$TOMCAT_HOME/bin/catalina.sh文件,在虚拟机启动参数JAVA_OPTS中添加java.library.path参数,指定apr库的路径

JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"



关闭ssl,将SSLEngine的值从on改成off即可:

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
Tomcat 6.x版本从6.0.32开始就默认支持apr
Tomcat 7.x版本从7.0.30开始就默认支持apr


   

Tomcat8以下版本,需要指定运行模式,将protocol从HTTP/1.1改成org.apache.coyote.http11.Http11AprProtocol

1、server.xml
<Connector port="8080"

protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="1000"

maxHttpHeaderSize="8192"

acceptCount="1000"

disableUploadTimeout="true"

connectionTimeout="20000"

redirectPort="8230" />

 tomcat7.x-Connector参数

http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

http://tomcat.apache.org/tomcat-8.0-doc/config/http.html

tomcat--Connector参数解读
<Connector
port="80" //监听端口
protocol="HTTP/1.1" //协议
enableLookups="false" //禁止反向DNS查询客户端主机名
maxThreads="600" //最大线程数
minSpareThreads="100" //初始化创建的线程数
maxSpareThreads="500" //一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。在7.8取消了
acceptCount="700" //最大等待数
connectionTimeout="20000" //连接超时
redirectPort="8443" //重定向
/>




给tomcat 添加角色与账号密码,tomcat-users.xml配置文件增加以下内容:


<role rolename="manager"/>

<role rolename="manager-gui"/>

<role rolename="admin"/>

<role rolename="admin-gui"/>

<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>

   
 

自行根据情况调整参数。我这里使用普通用户启动tomcat程序,

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

  由于打开文件会比较多,所以要考虑修改默认打开文件数目

cat /etc/security/limits.conf

tomcat   soft   nproc    500000
tomcat   hard   nproc    500000

tomcat   soft   nofile   1048000
tomcat   hard   nofile   1048000


[root@zabbixserver lib]# cat /etc/security/limits.d/90-nproc.conf

*          soft    nproc     unlimited
root       soft    nproc     unlimited


给/etc/profile修改登陆环境。

JAVA_HOME=/usr/java/default
JRE_HOME=/usr/java/default/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$JAVA_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

if [ $USER = "tomcat" ]; then
    if [ $SHELL = "/bin/ksh" ]; then
        ulimit -p 16384
      ulimit -n 65536
    else
      ulimit -u 500000 -n 1048000
    fi
fi


最后切换普通用户后,运行Tomcat,看到如下日志表示开启apr模式成功:

判定运行方式
Tomcat启动的时候,可以通过log看到Connector使用的是哪一种运行模式:
Starting ProtocolHandler ["http-bio-8080"]
Starting ProtocolHandler ["http-nio-8080"]
Starting ProtocolHandler ["http-apr-8080"]



转载请标明出处【Centos6安装Tomcat/7.0.96+apr模式+openssl-1.1.0k+jdk1.7优化性能】。

《www.micoder.cc》 虚拟化云计算,系统运维,安全技术服务.

网站已经关闭评论