Tomcat8 效能調優
阿新 • • 發佈:2018-11-09
1.優化Linux核心及TCP連線
編輯系統配置檔案:
vim /etc/sysctl.conf
修改內容如下:
配置 | 說明 |
---|---|
fs.file-max = 655350 |
系統檔案描述符總量 |
net.ipv4.ip_local_port_range = 1024 65535 |
開啟埠範圍 |
net.ipv4.tcp_max_tw_buckets = 2000 |
設定tcp連線時TIME_WAIT個數 |
net.ipv4.tcp_tw_recycle = 1 |
開啟快速tcp TIME_WAIT快速回收 |
net.ipv4.tcp_tw_reuse = 1 |
開啟TIME_WAIT重用 |
net.ipv4.tcp_syncookies = 1 |
開啟SYN cookies 當出現syn等待溢位,啟用cookies來處理,可防範少量的syn攻擊 |
net.ipv4.tcp_syn_retries = 2 |
對於一個新建的tcp連線,核心要傳送幾個SYN連線請求才決定放棄 |
net.ipv4.tcp_synack_retries = 2 |
這裡是三次握手的第二次連線,伺服器端傳送syn+ack響應 這裡決定核心傳送次數 |
net.ipv4.tcp_keepalive_time = 1200 |
tcp的長連線,這裡注意:tcp的長連線與HTTP的長連線不同 |
net.ipv4.tcp_fin_timeout = 15 |
設定保持在FIN_WAIT_2狀態的時間 |
net.ipv4.tcp_max_syn_backlog = 20000 |
tcp半連線最大限制數 |
net.core.somaxconn = 65535 |
定義一個監聽最大的佇列數 |
net.core.netdev_max_backlog = 65535 |
當網路介面比核心處理資料包速度快時,允許送到佇列資料包的最大數目 |
讓改動配置立即生效:
sysctl -p
2.修改Tomcat Connector執行模式為APR
Tomcat Connector有三種執行模式:
- BIO:阻塞IO
BIO
是三種執行模式中效能最低第一種。 - NIO:是一個基於緩衝區,並能提供非阻塞
I/O
操作的JAVA API
因此NIO
也成為非阻塞I/O
,比BIO
擁有更好的併發效能。 - APR:呼叫
httpd
核心連結庫來讀取或檔案傳輸,從而提高Tomcat
對靜態檔案的處理效能。
Tomcat APR
模式也是Tomcat在高併發下的首選執行模式。
請確保JDK版本的正確性
[root@server3 src]# java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
安裝apr
[root@server3 src]# wget http://apache.fayea.com/apr/apr-1.5.2.tar.gz
[root@server3 apr-1.5.2]# cd apr-1.5.2
[root@server3 apr-1.5.2]# vim configure #查詢 $RM "$cfgfile" 這個地方,用#註釋掉,然後就可以了
[root@server3 apr-1.5.2]# ./configure --prefix=/usr/local/apr
[root@server3 apr-1.5.2]# make && make install
安裝apr-util
[root@server3 src]# wget http://apache.fayea.com/apr/apr-util-1.5.4.tar.gz
[root@server3 apr-1.5.2]# cd ..
[root@server3 src]# tar xf apr-util-1.5.4.tar.gz
[root@server3 src]# cd apr-util-1.5.4
[root@server3 apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
[root@server3 apr-util-1.5.4]# make && make install
[[email protected] apr-util-1.5.4]# ll /usr/local/apr*
/usr/local/apr:
total 16
drwxr-xr-x. 2 root root 4096 Apr 24 08:20 bin/
drwxr-xr-x. 2 root root 4096 Apr 24 08:20 build-1/
drwxr-xr-x. 3 root root 4096 Apr 24 08:20 include/
drwxr-xr-x. 3 root root 4096 Apr 24 08:20 lib/
/usr/local/apr-util:
total 12
drwxr-xr-x. 2 root root 4096 Apr 24 08:23 bin/
drwxr-xr-x. 3 root root 4096 Apr 24 08:22 include/
drwxr-xr-x. 3 root root 4096 Apr 24 08:23 lib/
安裝tomcat-native.tar.gz
[root@server3 apr-util-1.5.4]# cp -a /usr/local/tomcat8.0/bin/tomcat-native.tar.gz /usr/local/src/
[root@server3 apr-util-1.5.4]# cd !$
cd /usr/local/src/
[root@server3 src]# tar xf tomcat-native.tar.gz
[root@server3 src]# cd tomcat-native
tomcat-native-1.2.5-src/ tomcat-native.tar.gz
[root@server3 src]# cd tomcat-native-1.2.5-src/
[root@server3 tomcat-native-1.2.5-src]# cd native/
[root@server3 native]# ./configure --prefix=/usr/local/apr --with-java-home=/usr/local/jdk1.8/
[root@server3 native]# make && make install
[root@server3 native]# vim /etc/profile.d/apr.sh
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
:wq
[root@server3 native]# source /etc/profile.d/apr.sh
重啟Tomcat 檢視日誌
[[email protected] bin]# sh shutdown.sh
[[email protected] bin]# sh startup.sh
[[email protected] bin]# tail ../logs/catalina.out
24-Apr-2016 08:42:20.843 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"] # 通過檢視啟動日誌,tomcat執行模式已經切換到APR。
24-Apr-2016 08:42:20.872 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-apr-8009"]
24-Apr-2016 08:42:20.877 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1090 ms
3.Tomcat JVM虛擬機器記憶體優化
Tomcat
記憶體優化主要是對Tomcat
啟動引數優化,可以修改catalina.sh
中設定JAVA_OPTS
引數。
JAVA_OPTS引數說明
引數 | 說明 |
---|---|
-server | 啟用jdk 的 server 版; |
-Xms | java虛擬機器初始化時的最小記憶體; |
-Xmx | java虛擬機器可使用的最大記憶體; |
配置如下:
[root@server3 bin]# vim /usr/local/tomcat8.0/bin/catalina.sh
JAVA_OPTS='-server -Xms1024m -Xmx1024m'
4.Tomcat併發優化
1.Tomcat配置檔案server.xml
中<Connector .../>
2.引數說明:
minProcessors:最小空閒連線執行緒數,用於提高系統處理效能,預設值為 10
maxProcessors:最大連線執行緒數,即:併發處理的最大請求數,預設值為 75
acceptCount:允許的最大連線數,應大於等於 maxProcessors ,預設值為 100
enableLookups:是否反查域名,取值為: true 或 false 。為了提高處理能力,應設定為 false
connectionTimeout:網路連線超時,單位:毫秒。設定為 0 表示永不超時,這樣設定有隱患的。通常可設定為 30000 毫秒。
其中和最大連線數相關的引數為maxProcessors 和 acceptCount 。如果要加大併發連線數,應同時加大這兩個引數。
web server允許的最大連線數還受制於作業系統的核心引數設定,通常 Windows 是 2000 個左右, Linux 是 1000 個左右。
maxThreads 客戶請求最大執行緒數
minSpareThreads Tomcat初始化時建立的 socket 執行緒數
maxSpareThreads Tomcat聯結器的最大空閒 socket 執行緒數
enableLookups 若設為true, 則支援域名解析,可把 ip 地址解析為主機名
redirectPort 在需要基於安全通道的場合,把客戶請求轉發到基於SSL 的 redirectPort 埠
acceptAccount 監聽埠佇列最大數,滿了之後客戶請求會被拒絕(不能小於maxSpareThreads )
connectionTimeout 連線超時
minProcessors 伺服器建立時的最小處理執行緒數
maxProcessors 伺服器同時最大處理執行緒數
URIEncoding URL統一編碼
3.推薦配置如下:
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="1000"
minProcessors="100"
maxProcessors="1000"
minSpareThreads="100"
maxSpareThreads="1000"
enableLookups="false"
URIEncoding="utf-8"
acceptCount="1000"
connectionTimeout="20000"
disableUploadTimeout="ture"
redirectPort="8443" />