最近轉行做java
,開發基於Springboot
的項目,版本號為2.1.0.RELEASE
.
啟動應用,發現以下提示:
The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64/server:/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64:/usr/lib/jvm/java-1.8-openjdk/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
提示告知,使用基於Apache Tomcat Native library
的ARP
可以提升生產環境性能
.
以下是從網上節選的話語:
apr是從操作系統級別解決
異步IO
問題,大幅度提高服務器的並發處理性能
,也是Tomcat生產環境運行的首選方式.
目前Tomcat 8.x默認情況下全部是運行在nio
模式下,而apr的本質就是使用jni技術調用操作系統底層的IO接口.
如此具有誘惑力,當然值得花費時間去解決,按照網上教程安裝依賴:
sudo apt-get isntall libapr1-dev libssl-dev libtcnative-1
此處,需要注意網上給出的資源大多數是libapr
以及libtcnative
,安裝時提示無法找到.
因此,搜索到包名被修改成上述定義.
$ dpkg -L libtcnative-1
# 以下是輸出信息
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libtcnative-1.a
/usr/lib/x86_64-linux-gnu/libtcnative-1.so.0.2.16
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/tcnative-1.pc
/usr/share
/usr/share/doc
/usr/share/doc/libtcnative-1
/usr/share/doc/libtcnative-1/README.Debian
/usr/share/doc/libtcnative-1/changelog.Debian.gz
/usr/share/doc/libtcnative-1/changelog.gz
/usr/share/doc/libtcnative-1/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/libtcnative-1
/usr/lib/x86_64-linux-gnu/libtcnative-1.so
/usr/lib/x86_64-linux-gnu/libtcnative-1.so.0
使用dpkg
可以得知,libtcnative-1
的靜態庫被安裝至:/usr/lib/x86_64-linux-gnu
.
因此,啟動程序:
java -jar -Djava.library.path=/usr/lib/x86_64-linux-gnu cache-0.0.1-SNAPSHOT.jar
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.1.RELEASE)
org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/9.0.13
2019-01-10 15:33:55.586 INFO 2243 --- [ main] o.a.catalina.core.AprLifecycleListener : An older version [1.2.16] of the APR based Apache Tomcat Native library is installed, while Tomcat recommends a minimum version of [1.2.18]
2019-01-10 15:33:55.586 INFO 2243 --- [ main] o.a.catalina.core.AprLifecycleListener : Loaded APR based Apache Tomcat Native library [1.2.16] using APR version [1.6.3].
2019-01-10 15:33:55.586 INFO 2243 --- [ main] o.a.catalina.core.AprLifecycleListener : APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
2019-01-10 15:33:55.586 INFO 2243 --- [ main] o.a.catalina.core.AprLifecycleListener : APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
2019-01-10 15:33:55.597 INFO 2243 --- [ main] o.a.catalina.core.AprLifecycleListener : OpenSSL successfully initialized [OpenSSL 1.1.0h 27 Mar 2018]
2019-01-10 15:33:55.748 INFO 2243 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
輸出的啟動信息中,可以看到APR based Apache Tomcat Native library
被加載了.
但是讓人心塞的是,輸出信息中提示版本過低,不滿足現階段使用的最小版本要求(差了兩個小版本號).
An older version [1.2.16] of the APR based Apache Tomcat Native library is installed, while Tomcat recommends a minimum version of [1.2.18]
根據網上搜索結果可知,無法通過apt-get
去安裝高版本的libtcnative
,只能手動編譯安裝.
因此,去Tomcat
官網下載(http://tomcat.apache.org/native-doc/
),可以看到最新的版本號為1.2.19
,於是下載源碼包.
解壓后可以看到目錄結構:
.
├── build.properties.default
├── build.xml
├── CHANGELOG.txt
├── CMakeLists.txt
├── docs
├── examples
├── java
├── jnirelease.sh
├── LICENSE
├── native
├── NOTICE
├── README.txt
├── test
├── TODO.txt
└── xdocs
執行以下命令,進行編譯安裝:
sudo apt-get autoremove libtcnative-1 #刪除安裝的庫
cd native
./configure && make -j 4
sudo make install
此處,configure
命令無需按照官網指示配置參數,會自行搜索依賴所在路徑.
安裝完之后,可以得知靜態庫被安裝至/usr/local/apr/lib
.
重新啟動程序:
java -jar -Djava.library.path=/usr/local/apr/lib cache-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.1.RELEASE)
o.a.catalina.core.AprLifecycleListener : Loaded APR based Apache Tomcat Native library [1.2.19] using APR version [1.6.3].
2019-01-10 15:48:29.130 INFO 7538 --- [ main] o.a.catalina.core.AprLifecycleListener : APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
2019-01-10 15:48:29.130 INFO 7538 --- [ main] o.a.catalina.core.AprLifecycleListener : APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
2019-01-10 15:48:29.136 INFO 7538 --- [ main] o.a.catalina.core.AprLifecycleListener : OpenSSL successfully initialized [OpenSSL 1.1.0h 27 Mar 2018]
2019-01-10 15:48:29.255 INFO 7538 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
通過輸出信息,可以得知:程序完美加載APR based Apache Tomcat Native library
,性能就等着提升了.
將參數設置到idea
的VM options
中,調試的時候也舒服了許多.
PS:
如果您覺得我的文章對您有幫助,可以掃碼領取下紅包,謝謝!