tomcat啟動報錯APR問題
背景
很多的生產環境項目都在使用tomcat,所以要經常的跟tomcat打交道,排錯是家常便飯。本博文主要是是介紹關於tomcat啟動時報APR錯誤,報錯信息如下:
02-Aug-2017 18:13:00.769 INFO [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]
apr官網簡介
Tomcat可以使用APR來提供超強的可伸縮性和性能,更好地集成本地服務器技術。APR(Apache Portable Runtime)是一個高可移植庫,它是Apache HTTP Server 2.x的核心。APR有很多用途,包括訪問高級IO功能(例如sendfile,epoll和OpenSSL),OS級別功能(隨機數生成,系統狀態等等),本地進程管理(共享內存,NT管道和UNIX sockets)。
這些功能可以使Tomcat作為一個通常的前臺WEB服務器,能更好地和其它本地web技術集成,總體上讓Java更有效率作為一個高性能web服務器平臺而不是簡單作為後臺容器。在產品環境中,特別是直接使用Tomcat做WEB服務器的時候,應該使用Tomcat Native來提高其性能。
概括起來就是如何在Tomcat中使用JNI的方式來讀取文件以及進行網絡傳輸。這個東西可以大大提升Tomcat對靜態文件的處理性能,同時如果你使用了HTTPS方式 傳輸的話,也可以提升SSL的處理性能。
官網鏈接
http://tomcat.apache.org/tomcat-7.0-doc/apr.html
http://tomcat.apache.org/tomcat-8.5-doc/apr.html
環境說明
下面是以已經安裝好JDK和tomcat為前提,我的環境如下
Centos7.3_x64
Tomcat8.5.16
Jdk1.8.0_131
安裝
本文中涉及的安裝包打包下載地址:
http://down.51cto.com/data/2331074
一、windows下安裝
直接拷貝tcnative-1.dll到TOMCAT_HOME/bin目錄下,啟動即可
下載地址: http://archive.apache.org/dist/tomcat/tomcat-connectors/native/
二 、linux下安裝
2.1下載安裝包
下載地址: http://apr.apache.org/
http://www.openssl.org/
apr-1.6.2.tar.gz
apr-iconv-1.2.1.tar.gz
apr-util-1.6.0.tar.gz
openssl-1.0.2l.tar.gz
2.2 安裝apr插件
1)安裝apr
tar zxvf apr-1.6.2.tar
cd apr-1.6.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.6.0.tar.gz
cd apr-util-1.6.0
./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
(此包tomcat自帶,在bin目錄下)
tar zxvf tomcat-native.tar.gz
cd tomcat-native-1.2.12-src/native
./configure --with-apr=/usr/local/apr --with-java-home= /usr/java/jdk1.8.0_131 --with-ssl=/usr/local/openssl
make
make install
備註:編譯時報錯openssl版本有問題,請參考問題匯總問題3
5)添加環境變量
vi /etc/profile #在他文件末尾處添加下面的變量
# apr
export LD_LIBRARY_PATH=/usr/local/apr/lib
立即生效
source /etc/profile
使用./catalina configtest檢測問題,報錯已經消失。
正常信息顯示如下:
02-Aug-2017 18:17:13.908 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded APR based Apache Tomcat Native library [1.2.12] using APR version [1.6.2]. 02-Aug-2017 18:17:13.908 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. 02-Aug-2017 18:17:13.908 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true] 02-Aug-2017 18:17:13.922 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.0.2l 25 May 2017]
問題匯總
1.如果經過上述部署後,還是報錯?
復制/usr/local/apr/lib/文件到/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib任何目錄即可。
2.錯誤:SEVERE: Failed to initialize the SSLEngine?
SEVERE: Failed to initialize the SSLEngine. org.apache.tomcat.jni.Error: 70023: This function has not been implemented on this platform
請關閉SSL偵聽,除非你有使用SSL
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
3.報錯openssl版本有問題?
編譯native時,報錯openssl版本有問題,所以此時只能先解決openssl的問題。
出現錯誤:configure: error: Your version of OpenSSL is not compatible with this version of tcnative
tar zxf openssl-1.0.2l.tar.gz
./config –prefix=/usr/local/openssl –fPIC
#加上-fPIC參數,否則編譯native的時候會報錯,如附一
make
make install
附一:編譯native報錯
/usr/local/openssl/lib/libssl.a(s3_meth.o): relocation R_X86_64_32 against `.rodata‘ can not be used when making a shared object; recompile with –fPIC /usr/local/openssl/lib/libssl.a: could not read symbols: Bad value collect2: error: ld returned 1 exit status make[1]: *** [libtcnative-1.la] Error 1 make[1]: Leaving directory `/usr/local/tomcat-native-1.2.8-src/native‘ make: *** [all-recursive] Error
本文出自 “技術成就夢想” 博客,請務必保留此出處http://pizibaidu.blog.51cto.com/1361909/1953319
tomcat啟動報錯APR問題