Tomcat 的缺省配置是不能穩定長期運行的,也就是不適合生產環境,它會死機,讓你不斷從新啓動,甚至在午夜時分喚醒你。對於操做系統優化來講,是儘量的增大可以使用的內存容量、提升CPU 的頻率,保證文件系統的讀寫速率等。通過壓力測試驗證,在併發鏈接不少的狀況下,CPU 的處理能力越強,系統運行速度越快。java
Tomcat 的優化不像其它軟件那樣,簡簡單單的修改幾個參數就能夠了,它的優化主要有三方面,分爲系統優化,Tomcat 自己的優化,Java 虛擬機(JVM)調優。系統優化就不在介紹了,接下來就詳細的介紹一下 Tomcat 自己與 JVM 優化,以 Tomcat 7 爲例。web
一、優化內核及TCP鏈接:apache
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 # 當網絡接口比內核處理數據包速度快時,容許送到隊列數據包的最大數目 保存退出 [root@cloud ~]# sysctl -p # 添加生效
二、修改Tomcat Connector運行模式爲aprvim
Tomcat Connector有三種運行模式:tomcat
bio:阻塞IO bio是三種運行模式中性能最低第一種。安全
nio:是一個基於緩衝區,並能提供非阻塞I/O操做的JAVA API 所以NIO也成爲非阻塞I/O,比bio擁有更好的併發性能。服務器
apr:調用httpd核心連接庫來讀取或文件傳輸,從而提升tomat對靜態文件的處理性能。Tomcat APR模式也是Tomcat在高併發下的首選運行模式:cookie
[root@server3 src]# java -version # 請確保JDK版本的正確性 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、apr-util、tomcat-native.tar.gz [root@server3 src]# wget http://apache.fayea.com//apr/apr-1.5.2.tar.gz [root@server3 src]# wget http://apache.fayea.com//apr/apr-util-1.5.4.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 [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 [root@server3 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/ [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 [root@server3 bin]# sh shutdown.sh [root@server3 bin]# sh startup.sh [root@server3 bin]# tail ../logs/catalina.out 24-Apr-2016 08:42:20.319 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat8.0/webapps/ROOT has finished in 39 ms 24-Apr-2016 08:42:20.320 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat8.0/webapps/examples 24-Apr-2016 08:42:20.713 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat8.0/webapps/examples has finished in 393 ms 24-Apr-2016 08:42:20.717 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat8.0/webapps/manager 24-Apr-2016 08:42:20.799 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat8.0/webapps/manager has finished in 82 ms 24-Apr-2016 08:42:20.799 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat8.0/webapps/docs 24-Apr-2016 08:42:20.835 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat8.0/webapps/docs has finished in 36 ms 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內存優化:網絡
Tomcat內存優化主要是對tomcat啓動參數優化,能夠修改catalina.sh中設置JAVA_OPTS參數併發
1.JAVA_OPTS參數說明
-server 啓用jdk 的 server 版; -Xms java虛擬機初始化時的最小內存; -Xmx java虛擬機可以使用的最大內存;
配置以下:
[root@server3 bin]# vim /usr/local/tomcat8.0/bin/catalina.sh 97行 JAVA_OPTS='-server -Xms1024m -Xmx1024m'
4、Tomcat併發優化
一、Tomcat配置文件server.xml中<Connector .../>
二、參數說明:
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統一編碼
配置以下:
69 <Connector port="8080" protocol="HTTP/1.1" 70 maxThreads="1000" 71 minProcessors="100" 72 maxProcessors="1000" 73 minSpareThreads="100" 74 maxSpareThreads="1000" 75 enableLookups="false" 76 URIEncoding="utf-8" 77 acceptCount="1000" 78 connectionTimeout="20000" 79 disableUploadTimeout="ture" 80 redirectPort="8443" />
tomcat對內存及併發的優化就這些。可根據具體的資源進行調整。重啓tomcat,觀察日誌有無報錯。