轉自:https://www.cnblogs.com/busigulang/articles/8529719.html
一 安裝tomcat 8.5
修改運行級別為文本
# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
1. 創建標准目錄結構
mkdir /software
mkdir /data
mkdir /script
1.准備軟件
cd /software/
wget http://124.202.164.15/files/116700000B429E7F/download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.28/bin/apache-tomcat-8.5.28.tar.gz
2.安裝前檢查:
rpm -qa | grep java
rpm -e --nodeps java*
3. 安裝jdk
cd /woftware/
tar zxvf jdk-8u161-linux-x64.tar.gz
mv jdk1.8.0_161 /data/jdk
ln -s /data/jdk /usr/local/JAVA
# 配置環境變量:
在/etc/profile 中加入:
# Set JDK 環境變量
export JAVA_HOME=/usr/local/JAVA ##JDK路徑
export PATH=/bin:/jre/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/root/bin
export CLASSPATH=/lib/:/jre/lib:
# 運行:source /etc/profile 使配置文件生效
source /etc/profile
# 檢查驗證是否安裝成功
[root@tomcat_jvm software]# /usr/local/JAVA/bin/java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
4 .安裝tomcat 8.5
[root@tomcat_jvm software]# tar zxvf apache-tomcat-8.5.28.tar.gz
# 根據部署的內容將apache-tomcat改名
[root@tomcat_jvm software]# cp -r apache-tomcat-8.5.28 /data/Tomcat-Pay
[root@tomcat_jvm software]# cd /data/Tomcat-Pay/
[root@tomcat_jvm Tomcat-Pay]# ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
#===============================================================================
# 安裝后配置:Tomcat啟動、停止等
# 啟動
[root@tomcat_jvm bin]# /data/Tomcat-Pay/bin/startup.sh
# 停止
[root@tomcat_jvm bin]# /data/Tomcat-Pay/bin/shutdown.sh
# 查看版本信息
[root@tomcat_jvm bin]# /data/Tomcat-Pay/bin/version.sh
# 輸出結果:
Using CATALINA_BASE: /data/Tomcat-Pay
Using CATALINA_HOME: /data/Tomcat-Pay
Using CATALINA_TMPDIR: /data/Tomcat-Pay/temp
Using JRE_HOME: /usr/local/JAVA
Using CLASSPATH: /data/Tomcat-Pay/bin/bootstrap.jar:/data/Tomcat-Pay/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.5.28
Server built: Feb 6 2018 23:10:25 UTC
Server number: 8.5.28.0
OS Name: Linux
OS Version: 3.10.0-327.el7.x86_64
Architecture: amd64
JVM Version: 1.8.0_161-b12
JVM Vendor: Oracle Corporation
5. 配置開機啟動
[root@tomcat_jvm bin]# chmod +x /etc/rc.d/rc.local
[root@tomcat_jvm bin]# echo '/data/Tomcat-Pay/bin/startup.sh' >> /etc/rc.d/rc.local
二 安裝apr擴展提升tomcat性能
Tomcat 8.5 基於 Apache Portable Runtime(APR)庫性能優化
Tomcat可以使用Apache Portable Runtime來提供卓越的性能及可擴展性,更好地與本地服務器技術的集成。Apache Portable Runtime是一個高度可移植的庫,位於Apache HTTP Server 2.x的核心。APR有許多用途,包括訪問高級IO功能(如sendfile,epoll和OpenSSL),操作系統級功能(隨機數生成,系統狀態等)以及本地進程處理(共享內存,NT管道和Unix套接字)。
這些功能不僅僅是一個后端集中的技術,還可以讓Tomcat成為通用的網絡服務器,可以實現與本地的其他Web技術更好的集成,並使Java成為一個完整的網絡服務器平台。
官方要求:
APR 1.2+ development headers (libapr1-dev package)
OpenSSL 1.0.2+ development headers (libssl-dev package)
JNI headers from Java compatible JDK 1.4+
GNU development environment (gcc, make)
生產環境:
CentOS Linux release 7 (Core) x86 64
Server version: Apache Tomcat/8.5.28
java version “1.8.0_131”
1.安裝相關依賴包
# yum -y install gcc gcc-c++ libtool* autoconf automake expat-devel perl perl-devel
2.下載安裝包 http://mirror.bit.edu.cn/apache/apr/
# cd /software/
# wget http://mirror.bit.edu.cn/apache/apr/apr-1.6.2.tar.gz
# wget http://mirror.bit.edu.cn/apache/apr/apr-iconv-1.2.2.tar.gz
# wget http://mirror.bit.edu.cn/apache/apr/apr-util-1.6.0.tar.gz
# wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz
備用地址 https://mirrors.tuna.tsinghua.edu.cn/apache//apr/
wget http://219.239.26.11/files/224600000AE1B9A7/mirror.bit.edu.cn/apache//apr/apr-1.6.3.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.3.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-iconv-1.2.2.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
3.安裝APR
# tar zxvf apr-1.6.2.tar.gz
# cd apr-1.6.2
# vim configure
如有問題可以修改該值,經測試並沒有發現該問題
默認值:
RM='$RM'
修改為:
RM='$RM -f'
# ./configure --prefix=/usr/local/apr
# make && make install
4.安裝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
5.安裝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
6.安裝OpenSSL
# tar zxvf openssl-1.1.0f.tar.gz
# cd openssl-1.1.0f
# ./config --prefix=/usr/local/openssl
# make -j 4 && make install
7.安裝tomcat-native
# cd /usr/local/tomcat/bin/
# tar zxvf tomcat-native.tar.gz
# cd tomcat-native-1.2.12-src/native
# ./configure --with-ssl=/usr/local/openssl --with-apr=/usr/local/apr --with-java-home=/usr/local/JAVA
# make && make install
注意:如果以上 configure 失敗,可以執行 make distclean 清除
8.添加變量內容
# vim /etc/profile.d/jdk.sh
export LD_LIBRARY_PATH=/usr/local/apr/lib:$LD_LIBRARY_PATH
# source /etc/profile.d/jdk.sh
至此APR安裝成功。
9.接下來需要修改tomcat配置文件中的APR運行模式,並測試是否安裝成功。
# vim /usr/local/tomcat/conf/server.xml
默認值:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改為:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
默認值:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改為:
<Connector port="8009" protocol="org.apache.coyote.ajp.AjpAprProtocol" redirectPort="8443" />
10.現在重啟tomcat服務,並查看啟動日志
# systemctl restart tomcat
# cat /usr/local/tomcat/logs/catalina.out
...
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]
INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
...
注意:如果遇到上面的提示找不到基於APR的Apache Tomcat Native庫,因此無法使用APR模式啟動。
解決方案:
# cp -R /usr/local/apr/lib/* /usr/lib64
# cp -R /usr/local/apr/lib/* /usr/lib
再次重啟tomcat,並查看啟動日志
# cat /usr/local/tomcat/logs/catalina.out
...
INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8009"]
...
可以看到已經以apr協議模式啟動成功,經基於APR的技術web壓力測試,Tomcat的性能飆升。
三 tomcat 調整:
1. 線程池(Thread Pool)優化
編輯“Tomcat安裝目錄/conf/server.xml”文件,找到如下內容
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
-->
取消注釋,參數做如下調整
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="1000" minSpareThreads="25"
maxIdleTime="600000" acceptCount="500"/>
參數說明:
name 這個是線程池的名字,必須唯一,默認即可,我們在后面的配置里要用到這個東西
namePrefix 線程的名字前綴,用來標記線程名字的,這樣每個線程就用這個前綴加上線程編號了,比如 catalina-exec-1 catalina-exec-2
maxThreads 線程池可以容納的最大線程數,tomcat使用線程來處理接收的請求每一個線程處理一個請求,這個值決定了同時能夠處理的最大請求數,缺省值為200
minSpareThreads 最小的保持活躍的線程數量,缺省值為4(tomcat5有此參數,而tomcat6無此參數,到了tomcat7又重新使用此參數,順便提下5和7中這兩個參數含義並不相同有興趣可以查看官方文檔)
maxIdleTime 關閉一個空閑線程之前允許空閑線程持續的時間,只有當前空閑線程數大於minSpareThread的值,才會關閉空閑線程
acceptCount 當所有可用的請求處理線程都被使用的時候,連接請求隊列的最大長度。當該隊列滿了以后的所有請求都被拒絕,缺省值為10
順便提下如下3個參數maxSpareThreads、maxProcessors和minProcessors
maxSpareThreads:允許存在的空閑線程的最大數量,tomcat5及以前版本才有的參數,tomcat6和tomcat7均無此參數
minProcessors:最小空閑連接線程數,用於提高系統處理性能
maxProcessors:最大連接線程數,即並發處理的最大請求數
maxProcessors和minProcessors是tomcat4才有的,tomcat5之后的版本均取消了這2個參數,tomcat4基本無人在用了吧,所以優化的時候別再把這2個參數加上了
2. 連接器(Connector)優化
編輯“Tomcat安裝目錄/conf/server.xml”文件,找到如下內容將其注釋掉
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
再找到如下內容,取消注釋
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
參數做如下調整
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
URIEncoding="UTF-8" enableLookups="false" disableUploadTimeout="true"
connectionTimeout="20000" keepAliveTimeout="15000" maxKeepAliveRequests="1000"
useURIValidationHack="false" compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
redirectPort="8443"/>
+---------------------------------------------------------------+
|
|
|
|
|
|
+--------------------------------------參數說明-------------------
AJP/1.3協議負責和其他HTTP服務器建立連接,監聽的是8009端口,比如tomcat和apache或者iis集成時使用這個連接器,此時則需優化8009端口的Connector。
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3"
URIEncoding="UTF-8" enableLookups="false" disableUploadTimeout="true"
connectionTimeout="20000" keepAliveTimeout="15000" maxKeepAliveRequests="1000"
useURIValidationHack="false" compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
redirectPort="8443" />
# 如果使用 nginx的話,可以直接注釋掉AJP
參數說明:
executor="tomcatThreadPool" 在 Connector里指定使用共享線程池的名稱
port="8080" 指定服務器端要創建的端口號,並在這個端口監聽來自客戶端的請求
protocol="HTTP/1.1" 負責建立HTTP連接,web應用通過瀏覽器訪問tomcat服務器用的就是這個連接器,默認監聽的是8080端口。所以我們優化的是8080端口的Connector
URIEncoding="UTF-8" URI解碼所使用的字符集,只影響GET請求的URI解碼,不影響post的解碼
enableLookups="false" 禁用DNS查詢,默認值為true,為了提高處理能力應設置為false
disableUploadTimeout="true" 允許servlet container在一個servlet執行的時候,使用一個不同的,更長的連接超時。最終的結果是給servlet更長的時間以便完成其執行,或者在數據上載的時候更長的超時時間。如果沒有指定默認為false
connectionTimeout="20000" 在Connector接受一個連接以后,等待發生第一個請求的時間,單位毫秒。缺省值為60000(60秒)
keepAliveTimeout="15000" 在一個長連接中2次請求之間的最大間隔時間,超過此時間連接斷開,單位毫秒
maxKeepAliveRequests="1000" 在server關閉連接之前,接受的HTTP請求的最大數目。如果該值設為1,會禁止HTTP/1.0保活,同時也會禁止HTTP/1.1保活和pipelining。如果沒有指定默認值100。
useURIValidationHack="false" 減少它對一些url的不必要的檢查從而減省開銷
compression="on" 設為on開啟Connector使用HTTP/1.1的GZIP壓縮,可節省服務器帶寬
compressionMinSize="2048" 啟用壓縮的輸出內容大小,這里面設置為2KB
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 壓縮文件的類型
redirectPort="8443" 如果Connector支持非SSL請求,在收到一個要求使用SSL傳輸的請求以后,Catalina會自動將該請求重定向到這里指定的端口號
3. JAVA虛擬機(JVM)優化
注意調優JVM需要了解使用的JDK是什么版本,隨着JDK版本發展有新參數引入,同時有舊參數廢棄。本文檔以JDK7為例進行調優
JDK7的JVM內存由Heap(堆空間)和Perm(持久代)組成. 其中Heap = {Old + young = { Eden , from, to } }
JDK8的JVM已經將Perm(持久代)從內存空間移除
Linux平台,編輯“Tomcat安裝目錄/conf/catalina.sh”文件,該文件開頭是一大段由#包裹的注釋,在注釋的最后添加如下內容
export JAVA_OPTS="-server -Xms3072M -Xmx3072M -Xmn512M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=256M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSMaxAbortablePrecleanTime=5 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -Djava.awt.headless=true"
如果想要打印JVM運行日志信息,則可以再添加如下參數,-Xloggs指定日志路徑
-Xloggc:/path/jvm.log -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCDetails
Windows平台,則編輯“Tomcat安裝目錄/conf/catalina.bat”文件
set JAVA_OPTS=-server -Xms3072M -Xmx3072M -Xmn512M -Xss512k -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:PermSize=256M -XX:MaxPermSize=256M -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSMaxAbortablePrecleanTime=5 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -Djava.awt.headless=true
如果想要打印JVM運行日志信息,則可以再添加如下參數,-Xloggs指定日志路徑
-Xloggc:D:\path\jvm.log -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCDetails
參數說明:
-server 指定JAVA虛擬機運行在server模式
-Xms 初始Heap內存大小,本文檔設置了3G,需要結合服務器CPU核數,內存總量等實際情況來設置合適數值,此值並非越大越好,過大將增加垃圾回收的壓力
-Xmx 最大Heap內存大小,本文檔設置了3G,需要結合服務器CPU核數,內存總量等實際情況來設置合適數值,此值並非越大越好,過大將增加垃圾回收的壓力
-Xmn 新生代內存大小
-Xss 每個線程的堆棧大小
-XX:+AggressiveOpts 啟用JVM開發團隊最新的調優成果,例如:編譯優化,偏向鎖,並行老年代收集,JDK5.6后引入,JDK6默認開啟
-XX:+UseBiasedLocking 啟用一個優化了的線程鎖(偏向鎖),JDK5.6后引入,JDK6默認開啟
-XX:PermSize 初始持久代內存大小,需要注意永久代在JDK8中被完全的移除了,永久代的參數-XX:PermSize和-XX:MaxPermSize也被移除了
-XX:MaxPermSize 最大持久代內存大小,需要注意永久代在JDK8中被完全的移除了,永久代的參數-XX:PermSize和-XX:MaxPermSize也被移除了
-XX:+DisableExplicitGC 禁止顯示的調用System.gc()方法進行GC
-XX:+UseConcMarkSweepGC 使用並發標記清除(CMS)垃圾收集器 它是對年老代進行垃圾收集的。CMS收集器通過多線程並發進行垃圾回收,盡量減少垃圾收集造成的停頓。采用這種垃圾收集器默認會開啟-XX:+UseParNewGC參數對新生代使用Parallel GC(並行垃圾回收器)
-XX:+UseParNewGC 新生代使用Parallel GC(並行垃圾回收器),如果老年代使用了CMS垃圾回收期,則新生代默認就是這種垃圾回收器
-XX:+CMSParallelRemarkEnabled CMS垃圾回收器回收對象時,應用有2次停頓,第一次是初始標記,第二次是重新標記,開啟並行remark可以降低重新標記停頓時間,
-XX:+UseCMSCompactAtFullCollection CMS不會整理堆碎片,為了防止堆碎片引起full gc,設置此參數使CMS垃圾回收時進行合並碎片,開啟這個選項一定程度上會影響性能
-XX:CMSMaxAbortablePrecleanTime
-XX:+CMSClassUnloadingEnabled 開啟CMS回收持久代,避免Perm區滿引起的full gc
-XX:LargePageSizeInBytes 指定Java heap的分頁頁面大小
-XX:+UseFastAccessorMethods 將get(),set()方法轉成本地代碼,默認開啟
-XX:+UseCMSInitiatingOccupancyOnly 只有達到-XX:CMSInitiatingOccupancyFraction指定的使用百分比才進行老年代的垃圾回收
-XX:CMSInitiatingOccupancyFraction 指定老年代在使用了多少百分比空間時開始進行垃圾回收,JDK5默認68%,JDK6默認92%
-Djava.awt.headless 解決J2EE工程中的圖表工具在Linux/Unix環境下會導致圖片顯示不出來
-Xloggc 指定JVM日志輸出到文件
-XX:+PrintGCDateStamps 打印GC發生的時間,JDK6和JDK7才支持,如果是JDK5請使用-XX:+PrintGCTimeStamps
-XX:+PrintGCApplicationStoppedTime 打印GC造成應用停頓的時間
-XX:+PrintGCApplicationConcurrentTime 打印GC時應用並發執行的時間
-XX:+PrintGCDetails 打印GC詳細信息
4. 調整Tomcat Connector的運行模式簡單介紹一下直接使用apr (上面已經配置為apr模式)
首先大致了解Tomcat Connector的三種運行模式:bio、nio和apr
bio
bio(blocking I/O),顧名思義,即阻塞式I/O操作,表示Tomcat使用的是傳統的Java I/O操作(即java.io包及其子包)。Tomcat在默認情況下,就是以bio模式運行的。遺憾的是,就一般而言,bio模式是三種運行模式中性能最低的一種。我們可以通過Tomcat Manager來查看服務器的當前狀態。
nio
nio(new I/O),是Java SE 1.4及后續版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Java nio是一個基於緩沖區、並能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的縮寫。它擁有比傳統I/O操作(bio)更好的並發運行性能。要讓Tomcat以nio模式來運行也比較簡單,我們只需要在Tomcat安裝目錄/conf/server.xml文件中將如下配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
中的protocol屬性值改為org.apache.coyote.http11.Http11NioProtocol即可
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
此時,我們就可以在Tomcat Manager中看到當前服務器狀態頁面的HTTP協議的Connector運行模式已經從http-bio-8080變成了nio
四 系統優化:
1. 修改pam限制
2. 修改硬盤算法
3. 內核參數
4. 關閉無用服務
5. 等等待續
五 安全設置:
1.編輯修改配置文件:
# vim /usr/program/tomcat8/conf/server.xml
2.禁用8005端口
telnet localhost 8005 然后輸入 SHUTDOWN 就可以關閉 Tomcat,為了安全我們要禁用該功能
默認值:
<Server port="8005" shutdown="SHUTDOWN">
修改為:
<Server port="-1" shutdown="SHUTDOWN">
3.應用程序安全&關閉自動部署
默認值:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
修改為:
<Host name="localhost" appBase="webapps"
unpackWARs="false" autoDeploy="false" reloadable="false">
4.maxThreads 連接數限制修改配置
默認值:
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
-->
修改為:
<Executor
name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="500"
minSpareThreads="30"
maxIdleTime="60000"
prestartminSpareThreads = "true"
maxQueueSize = "100"
/>
參數解釋:
maxThreads:最大並發數,默認設置 200,一般建議在 500 ~ 800,根據硬件設施和業務來判斷
minSpareThreads:Tomcat 初始化時創建的線程數,默認設置 25
maxIdleTime:如果當前線程大於初始化線程,那空閑線程存活的時間,單位毫秒,默認60000=60秒=1分鍾。
prestartminSpareThreads:在 Tomcat 初始化的時候就初始化 minSpareThreads 的參數值,如果不等於 true,minSpareThreads 的值就沒啥效果了
maxQueueSize:最大的等待隊列數,超過則拒絕請求
5.Connector 參數優化配置
默認值:
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
/>
修改為:
<Connector
executor="tomcatThreadPool"
port="8080"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="60000"
maxConnections="10000"
redirectPort="8443"
enableLookups="false"
acceptCount="100"
maxPostSize="10485760"
maxHttpHeaderSize="8192"
compression="on"
disableUploadTimeout="true"
compressionMinSize="2048"
acceptorThreadCount="2"
compressableMimeType="text/html,text/plain,text/css,application/javascript,application/json,application/x-font-ttf,application/x-font-otf,image/svg+xml,image/jpeg,image/png,image/gif,audio/mpeg,video/mp4"
URIEncoding="utf-8"
processorCache="20000"
tcpNoDelay="true"
connectionLinger="5"
server="Server Version 11.0"
/>
參數解釋:
protocol:Tomcat 8 設置 nio2 更好:org.apache.coyote.http11.Http11Nio2Protocol
protocol:Tomcat 6 設置 nio 更好:org.apache.coyote.http11.Http11NioProtocol
protocol:Tomcat 8 設置 APR 性能飛快:org.apache.coyote.http11.Http11AprProtocol 更多詳情:《Tomcat 8.5 基於 Apache Portable Runtime(APR)庫性能優化》
connectionTimeout:Connector接受一個連接后等待的時間(milliseconds),默認值是60000。
maxConnections:這個值表示最多可以有多少個socket連接到tomcat上
enableLookups:禁用DNS查詢
acceptCount:當tomcat起動的線程數達到最大時,接受排隊的請求個數,默認值為100。
maxPostSize:設置由容器解析的URL參數的最大長度,-1(小於0)為禁用這個屬性,默認為2097152(2M) 請注意, FailedRequestFilter 過濾器可以用來拒絕達到了極限值的請求。
maxHttpHeaderSize:http請求頭信息的最大程度,超過此長度的部分不予處理。一般8K。
compression:是否啟用GZIP壓縮 on為啟用(文本數據壓縮) off為不啟用, force 壓縮所有數據
disableUploadTimeout:這個標志允許servlet容器使用一個不同的,通常長在數據上傳連接超時。 如果不指定,這個屬性被設置為true,表示禁用該時間超時。
compressionMinSize:當超過最小數據大小才進行壓縮
acceptorThreadCount:用於接受連接的線程數量。增加這個值在多CPU的機器上,盡管你永遠不會真正需要超過2。 也有很多非維持連接,您可能希望增加這個值。默認值是1。
compressableMimeType:配置想壓縮的數據類型
URIEncoding:網站一般采用UTF-8作為默認編碼。
processorCache:協議處理器緩存的處理器對象來提高性能。 該設置決定多少這些對象的緩存。-1意味着無限的,默認是200。 如果不使用Servlet 3.0異步處理,默認是使用一樣的maxThreads設置。 如果使用Servlet 3.0異步處理,默認是使用大maxThreads和預期的並發請求的最大數量(同步和異步)。
tcpNoDelay:如果設置為true,TCP_NO_DELAY選項將被設置在服務器套接字,而在大多數情況下提高性能。這是默認設置為true。
connectionLinger:秒數在這個連接器將持續使用的套接字時關閉。默認值是 -1,禁用socket 延遲時間。
server:隱藏Tomcat版本信息,首先隱藏HTTP頭中的版本信息
6.隱藏或修改 Tomcat 版本號
# cd /usr/local/tomcat/lib/
# unzip catalina.jar
# cd org/apache/catalina/util
# vim ServerInfo.properties
server.info=Apache Tomcat/8.5.16
server.number=8.5.16.0
server.built=Jun 21 2017 17:01:09 UTC
將以上去掉或修改版本號即可。
7.刪除禁用默認管理頁面以及相關配置文件
# rm -rf /usr/local/apache-tomcat-8.5.16/webapps/*
# rm -rf /usr/local/apache-tomcat-8.5.16/conf/tomcat-users.xml
參考內容:
https://tomcat.apache.org/tomcat-8.5-doc/config/
https://github.com/judasn/Linux-Tutorial/blob/master/Tomcat-Install-And-Settings.md
http://wiki.jikexueyuan.com/project/linux-in-eye-of-java/Tomcat-Install-And-Settings.html
http://netkiller.github.io/journal/tomcat.html
http://zjliu.me/2015/12/14/tomcat-config-connector/