CentOS7下配置Tomcat以APR模式+Tomcat Native運行


  在慢速網絡上Tomcat線程數開到300以上的水平,不配APR,基本上300個線程狠快就會用滿,以后的請求就只好等待。但是配上APR之后,Tomcat將以JNI的形式調用Apache HTTP服務器的核心動態鏈接庫來處理文件讀取或網絡傳輸操作,這時並發的線程數量明顯下降,從原來的300可能會馬上下降到只有幾十,新的請求會毫無阻塞的進來。

  Tomcat 可以使用 apr 來提供更好的伸縮性、性能和集成到本地服務器技術,用來提高 tomcat 的性能。而tomcat native在具體的運行平台上提供了一種優化技術,它本身是基於 ARP(Apache Portable(輕便) Runtime)技術。在我們應用了tomcat native后,tomcat在跟操作系統級別的交互方面可以做得更好,並且它更像apache一樣,可以更好地作為一台 web server。tomcat 可以利用apache的apr接口,使用操作系統的部分本地操作,從而提升性能APR 提升的是靜態頁面處理能力。

(1).Tomcat的三種運行模式介紹

  Tomcat 有三種 運行模式,bio、nio、apr。

  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包及其子包),基於緩沖區、並能提供非阻塞I/O操作的Java API實現,比傳統的I/O處理方式(bio)有更高的並發運行性能。是Tomcat8的默認運行模式。

  apr(Apache Portable Runtime/Apache可移植運行庫)是Apache HTTP服務器的支持庫。從操作系統級別解決異步I/O問題,大幅度提高服務器的並發處理性能,也是Tomcat生產環境運行的首選方式。要tomcat支持apr,必須安裝apr和native,這樣tomcat才可以利用apache的apr接口,使用操作系統的部分本地操作,從而提升性能。

(2).安裝Tomcat Native

  注意:Tomcat Native已經集成到Tomcat8安裝目錄下的bin目錄。

 1)安裝依賴包

  注意:這里有個apr-devel,作為依賴apr也會被安裝。

[root@youxi1 ~]# yum -y install apr-devel gcc gcc-c++ openssl-devel openssl  

 2)解壓Tomcat Native包,編譯安裝

[root@youxi1 ~]# tar zxf /usr/local/tomcat8.5/bin/tomcat-native.tar.gz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/tomcat-native-1.2.18-src/native/
[root@youxi1 native]# ./configure --with-apr=/usr/ --with-java-home=/usr/local/jdk1.8.0_191 --with-ssl
[root@youxi1 native]# make && make install  //編譯安裝
----------------------------------------------------------------------
Libraries have been installed in:  //庫安裝在如下地址
/usr/local/apr/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
[root@youxi1 native]# echo $?
0

  說明:./configure有兩個參數需要注意下,--with-apr=/usr/提供的是查找apr的路徑可以更詳細的一點,--with-java-home后面跟隨的地址要和"echo $JAVA_HOME"輸出地址一致。

 3)根據安裝完成后的提示操作

  把庫添加到/etc/ld.so.conf

[root@youxi1 native]# vim /etc/ld.so.conf
/usr/local/apr/lib    //添加該行
[root@youxi1 native]# ldconfig  //重新加載
[root@youxi1 native]# echo "ldconfig" >> /etc/rc.local  //這是開機自啟文件的軟鏈接,需要源文件有執行權限
[root@youxi1 native]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 5月 14 09:12 /etc/rc.local -> rc.d/rc.local

  配置環境變量

[root@youxi1 native]# vim /etc/profile.d/jdk8.sh  //這是之前的JDK環境變量文件
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib  //新增一行
[root@youxi1 native]# . /etc/profile.d/jdk8.sh  //刷新

(3).配置APR

 1)修改conf/server.xml里的協議

  這個協議是<service>標簽里的<Connector>標簽的參數protocol,默認協議是HTTP/1.1。我們將協議修改為org.apache.coyote.http11.Http11AprProtocol

[root@youxi1 native]# vim /usr/local/tomcat8.5/conf/server.xml
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"  //將HTTP/1.1修改為當前值
connectionTimeout="20000"
redirectPort="8443" />

 2)在bin/catalina.sh中引用apr

[root@youxi1 native]# vim /usr/local/tomcat8.5/bin/catalina.sh
# Register custom URL handlers
# Do this here so custom URL handles (specifically 'war:...') can be used in the
 security policy
JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresour
ces"  //這是第253行,在這下面添加一行參數
JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"  //只要添加這一行

  注意:只要添加一行。

 3)重啟Tomcat

[root@youxi1 native]# ps aux | grep /usr/local/tomcat8.5/
root       1113  0.6 11.9 2327404 119308 ?      Sl   17:15   0:31 /usr/local/jdk1.8.0_191/bin/java -Djava.util.logging.config.file=/usr/local/tomcat8.5/conf/logging.properties
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
-Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat8.5/bin/bootstrap.jar:/usr/local/tomcat8.5/bin/tomcat-juli.jar
-Dcatalina.base=/usr/local/tomcat8.5 -Dcatalina.home=/usr/local/tomcat8.5 -Djava.io.tmpdir=/usr/local/tomcat8.5/temp org.apache.catalina.startup.Bootstrap start root 3078 0.0 0.1 112728 1004 pts/0 R+ 18:30 0:00 grep --color=auto /usr/local/tomcat8.5/ [root@youxi1 native]# kill -9 1113 [root@youxi1 native]# !ps ps aux | grep /usr/local/tomcat8.5/ root 3081 0.0 0.1 112728 1000 pts/0 R+ 18:30 0:00 grep --color=auto /usr/local/tomcat8.5/ [root@youxi1 native]# /usr/local/tomcat8.5/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat8.5 Using CATALINA_HOME: /usr/local/tomcat8.5 Using CATALINA_TMPDIR: /usr/local/tomcat8.5/temp Using JRE_HOME: /usr/local/jdk1.8.0_191 Using CLASSPATH: /usr/local/tomcat8.5/bin/bootstrap.jar:/usr/local/tomcat8.5/bin/tomcat-juli.jar Tomcat started. [root@youxi1 native]# !ps ps aux | grep /usr/local/tomcat8.5/ root 3091 94.6 7.2 2302932 72308 pts/0 Sl 18:31 0:04 /usr/local/jdk1.8.0_191/bin/java -Djava.util.logging.config.file=/usr/local/tomcat8.5/conf/logging.properties
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
-Djava.library.path=/usr/local/apr/lib -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat8.5/bin/bootstrap.jar:/usr/local/tomcat8.5/bin/tomcat-juli.jar
-Dcatalina.base=/usr/local/tomcat8.5 -Dcatalina.home=/usr/local/tomcat8.5 -Djava.io.tmpdir=/usr/local/tomcat8.5/temp org.apache.catalina.startup.Bootstrap start root 3108 0.0 0.1 112728 1004 pts/0 R+ 18:31 0:00 grep --color=auto /usr/local/tomcat8.5/

 4)查看日志是否支持native

[root@youxi1 ~]# cat /usr/local/tomcat8.5/logs/catalina.out | grep Native 
29-Jun-2019 17:47:25.635 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
29-Jun-2019 18:17:01.395 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
29-Jun-2019 18:24:08.267 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
30-Jun-2019 09:40:11.168 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
30-Jun-2019 11:45:02.398 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
30-Jun-2019 11:45:24.769 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
30-Jun-2019 11:54:19.711 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
30-Jun-2019 11:59:23.422 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
30-Jun-2019 12:11:33.778 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
30-Jun-2019 12:32:55.610 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
30-Jun-2019 14:33:56.449 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
30-Jun-2019 17:15:19.203 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
30-Jun-2019 18:31:10.739 信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library [1.2.18] using APR version [1.4.8].

  看最后一行,只有出現這一行才代表成功了。

參考:https://www.cnblogs.com/zishengY/p/7101616.html?utm_source=itdadao&utm_medium=referral

   https://www.cnblogs.com/hackyo/p/6792349.html

   https://www.cnblogs.com/passedbylove/p/7489425.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM