CentOS 7.5安裝配置Tomcat詳解(二)
二、Tomcat調優、開機自啟和日誌切割
1、 編譯安裝openssl、apr、apr-util和tomcat-native:
(1)編譯安裝openssl(下載地址https://www.openssl.org/source/):
# yum -y install openssl-devel
# tar -xf openssl-1.0.2p.tar.gz -C /usr/src
# cd /usr/src/openssl-1.0.2p
# ./config --prefix=/usr/local/openssl -fPIC
# make && make install
(2)編譯安裝
# tar -xf apr-1.6.5.tar.gz -C /usr/src
# cd /usr/src/apr-1.6.5
# vim configure --> 將30993行的$RM "$cfgfile"用#號註釋
# ./configure --prefix=/usr/local/apr --enable-profile --enable-threads --with-sendfile
# make && make install
# vim /etc/profile.d/apr.sh
export LD_LIBRARY_PATH=/usr/local/apr/lib:$LD_LIBRARY_PATH
# . /etc/profile.d/apr.sh
# echo $LD_LIBRARY_PATH
(3)編譯安裝apr-util:
# yum -y install expat-devel
# tar -xf apr-util-1.6.1.tar.gz -C /usr/src
# cd /usr/src/apr-util-1.6.1
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-openssl=/usr/local/openssl
# make && make install
(4)編譯安裝tomcat-native:
# cd /usr/local/tomcat/bin
# tar -zxf tomcat-native.tar.gz
# cd tomcat-native-1.2.17-src/native
# ./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/latest --with-ssl=/usr/local/openssl
# make && make install
備註:Tomcat的BIO、NIO和APR模式
BIO:blocking I/O,阻塞式I/O操作,表示Tomcat使用的是傳統的Java I/O操作(即java.io包及其子包)。預設的模式,效能最差,沒有經過任何優化處理和支援。
NIO:non-blocking I/O,Java SE 1.4及後續版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Java nio是一個基於緩衝區、並能提供非阻塞I/O操作的Java API。擁有比傳統I/O操作(bio)更好的併發執行效能。
APR:Apache Portable Runtime,Apache可移植執行時庫,Tomcat將以JNI的形式呼叫Apache HTTP伺服器的核心動態連結庫來處理檔案讀取或網路傳輸操作,從而大大地提高Tomcat對靜態檔案的處理效能。從作業系統級別來解決非同步的IO問題,大幅度的提高效能。Tomcat apr也是在Tomcat上執行高併發應用的首選模式。要讓Tomcat以apr模式來執行,必須安裝apr和native。
2、 安全方面的配置:# catalina.sh stop # ps -ef | grep java # rm -rf /usr/local/tomcat/webapps/examples
3、 JVM效能方面的配置:
# cd /usr/local/tomcat/bin
# cp catalina.sh catalina.sh.bak
# vim catalina.sh,在首行#!/bin/sh下新增如下程式碼
JAVA_OPTS='-server -Xms2048m -Xmx2048m'
備註:記憶體大小按實際情況調整
Ø -Xmx:Java Heap最大值,預設值為實體記憶體的1/4
Ø -Xms:Java Heap初始值,Server端JVM最好將-Xms和-Xmx設為相同值
4、 HTTP聯結器併發效能方面的配置:
# cd /usr/local/tomcat/conf
# cp server.xml server.xml.bak
# vim server.xml,將如下程式碼修改為
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
-->
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" enableLookups="false" minSpareThreads="50" maxThreads="1000" acceptCount="1000" />
備註:Connector中可以使用如下指令
Ø address:指定聯結器監聽的地址,預設為所有地址,即0.0.0.0
Ø port:監聽的埠,預設為0
Ø protocol:聯結器使用的協議為HTTP/1.1,定義AJP協議時通常為AJP/1.3,包括3種模式:BIO(預設採用的模型)、NIO(內建的模型)和APR(呼叫APR庫來實現作業系統級別控制)
Ø connectionTimeout:等待客戶端傳送請求的超時時間,單位為毫秒,預設為60000,即1分鐘
Ø redirectPort:如果某聯結器支援的協議是HTTP,當接收客戶端發來的HTTPS請求時,則轉發至此屬性定義的埠
Ø URIEncoding:可以使Tomcat解析含有中文名檔案的URL
Ø enableLookups:禁用DNS查詢以獲取客戶端的主機名,預設為true
Ø minSpareThreads:最小空閒執行緒數,任何情況都會存活的執行緒數,即便超過了最大空閒時間,也不會被回收
Ø maxThreads:處理請求的最大執行緒數,即最大併發連線數,超過則將請求放入等待佇列中進行排隊,等待空閒執行緒,預設值為200
Ø acceptCount:設定等待佇列的最大長度,當執行緒數達到maxThreads時,後續請求會被放入一個等待佇列,這個acceptCount就是這個佇列的大小,如果這個佇列也滿了,則返回connection refused(請求被拒絕),預設值為100
5、 開機自啟:
# vim /etc/rc.d/rc.local,末尾新增如下程式碼:
export JAVA_HOME=/usr/java/latest
/usr/local/tomcat/bin/startup.sh
# chmod +x /etc/rc.d/rc.local
6、 調優結果測試:
# catalina.sh configtest
# catalina.sh start
# ss -tunlp
# ps -ef | grep java
瀏覽器中訪問http://192.168.1.145:8080
7、 日誌檔案按天切割:
預設情況下,Tomcat的catalina.out日誌檔案是不會像其它日誌一樣,按日期進行分割,而是全部輸出寫入到一個catalina.out
# cd /usr/local/tomcat/logs
# ls -lh
# tar -zxf cronolog-1.6.2.tar.gz -C /usr/src
# cd /usr/src/cronolog-1.6.2
# ./configure --prefix=/usr/local/cronolog
# make && make install
# vim /usr/local/tomcat/bin/catalina.sh:
將第211行CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out修改成:
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out
刪除第440行touch "$CATALINA_OUT"
將第453行和第463行org.apache.catalina.startup.Bootstrap "[email protected]" start \修改成:
org.apache.catalina.startup.Bootstrap "[email protected]" start 2>&1 \
將第454行和第464行>> "$CATALINA_OUT" 2>&1 "&"修改成:
|/usr/local/cronolog/sbin/cronolog "$CATALINA_OUT" >> /dev/null &
# catalina.sh stop
# catalina.sh configtest
# catalina.sh start
# ps -ef | grep tomcat
可以只保留180天內的日誌檔案,每天凌晨1點執行自動清理:# crontab -e
0 1 * * * /bin/find /usr/local/tomcat/logs/ -type f -name "catalina.*.out" -mtime +180 | xargs rm -rf