mac下tomcat啟用APR模式
前言
配置完SSL,我其實還是希望通過wireshark分析一下SSL握手協議,APR模式其實是想用來嘗試下能否實現握手協議的,畢竟加入了openssl。事實證明,並沒有相關干係,但畢竟折騰了挺久的,還是稍作記錄下=。=
BIO NIO APR模式的比較
BIO:採用Java IO技術,單執行緒處理單請求(Tomcat7以下預設)
NIO:採用Java NIO技術,少量執行緒處理大量請求(Tomcat8以上預設)
APR:採用Jni技術,從操作層面解決io阻塞問題,適合高併發場景
處理請求方面:BIO
配置環境
系統:OSX10.11.4 64位
Xcode版本: 7.3.1
tomcat版本:8.0.33
jdk版本:1.8.0_77
相關檔案準備
apr安裝
解壓apr包,注意留意README文件,裡面有相關的資訊
預設安裝目錄在 /usr/local/apr
安裝的時候注意使用管理員許可權,sudo command ~
cd apr
./configure
make
make install
openssl安裝
解壓openssl包,注意INSTALL文件
預設安裝目錄為 /usr/local/ssl
安裝的時候,如果是64位的機子,配置檔案需要使用
./Configure darwin64-x86_64-cc
自動配置則使用
./config
編譯安裝:
make make install
tomcat-native安裝
解壓之後,在/tomcat-native/native/裡有BUIDING文件
./configure --with-apr=/usr/local/apr
--with-ssl=/usr/local/ssl
--with-java-home=${JAVA_HOME}
JAVA_HOME需要給出jdk的安裝目錄
make
make install
生成成功後,會在/usr/local/apr/lib下有libtcnative-1.0.dylib的庫檔案,這個就是tomcat啟動的依賴庫,需要把該檔案軟連結到警告中提到的任一目錄內。
ln -s /usr/local/apr/lib/libtcnative-1.dylib /Library/Java/Extensions/
注意這裡並不是直接連結原始檔,而是連結原始檔的軟連結
ln命令的介紹
tomcat server.xml配置
1.開啟APR監聽
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
2.配置APR Connectors
<Connector port="443" maxHttpHeaderSize="8192"
maxThreads="150"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
SSLCertificateFile="${伺服器簽名好的證書.crt}"
SSLCertificateKeyFile="${伺服器的金鑰.pem}" />
問題
1.UnsatisfiedLinkError
Exception in thread "main" java.lang.UnsatisfiedLinkError: /Users/wangtao/work/apache-tomcat/tcnative/trunk/native/.libs/libtcnative-1.0.dylib:dlopen(/Users/wangtao/work/apache-tomcat/tcnative/trunk/native/.libs/libtcnative-1.0.dylib,1): Symbol not found: _OCSP_RESPONSE_new
這個是因為openssl未完全編譯引起的,主要是64bit系統沒有按照64bit編譯的方式執行,編譯前應該執行下面操作
./Configure darwin64-x86_64-cc
2.配置tomcat-native沒有標頭檔案
fatal error: stdio.h: No such file or directory
原因:安裝Xcode的時候沒有安裝命令列操作工具
解決方案:
xcode-select –install
3.配置tomcat-native找不到gcc或者cc的路徑
原因:查詢的路徑不是預設的路徑
解決方案:
ln -s 你的gcc或者cc安裝目錄/usr 報錯資訊的目錄
總結
配置環境其實還是蠻好玩的,好好看看官方文件,然後自己摸索摸索把環境搭好,內心還是灰常欣慰的哈~
遇到問題的時候,嘗試通過日誌記錄的資訊,然後一步一步排除問題。對於每個指令,理解並知道其本質原理,上手起來其實都是很easy~恩,多動動手,linux多折騰折騰的確會很有意思呢~