在tomcat的server.xml中有類似:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxSpareThreads="750" maxThreads="1000" minSpareTHreads="50" acceptCount="1000" maxProcessors="1000" URIEncoding="gbk" useBodyEncodingForURI="true"/>
的配置, 其中:
acceptCount="1000" 可接受的最大連接數
maxProcessors="1000" 最大活動線程數
port="8080" 服務端口
protocol="HTTP/1.1" 服務協議
connectionTimeout="20000" 超時時間 單位是ms
redirectPort="8443" 重定向端口 需要安全通信的場合,將把客戶請求轉發至SSL的redirectPort端口
maxThreads:Tomcat可創建的最大的線程數,每一個線程處理一個請求; maxThreads決定了tomcat的最大線程閥值,需要設置的大一些
minSpareThreads:最小備用線程數,tomcat啟動時的初始化的線程數;
maxSpareThreads:最大備用線程數,一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程;
URIEncoding="gbk" 設置tomcat默認的轉碼格式
查看$TOMCAT_HOME/webapps/tomcat-docs/config/http.html這個說明文檔,有如下說明: URIEncoding:This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used. 也就是說,如果沒有設置URIEncoding, Tomcat默認是按ISO-8859-1進行URL解碼,ISO-8859-1並未包括中文字符,這樣的話中文字符肯定就不能被正確解析了。
轉載別人的博客:
一.Tomcat連接池配置 Tomcat想要承受大的並發量,必須增大連接數,一般的Tomcat的Connector可以做如下修改:
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="60000" redirectPort="8443" maxThreads="5000" acceptCount="500" minSpareThreads="100" maxSpareThreads="5000" enableLookups="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" disableUploadTimeout="true" URIEncoding="UTF-8" />
其中幾個關鍵的參數:
connectionTimeout:連接超時,毫秒為單位.對於高並發對實時要求不高的可以使適當增加該值
maxThreads:最大並發連接數
acceptCount:在超過最大連接數后,可以接受的排隊數量
minSpareThreads:Tomcat初始化時默認創建的線程數,也是以后線程增加時一次增加的最小數量
maxSpareThreads:這個參數標識,一旦創建的線程數量超過這個值,Tomcat就會關閉不活動的線程
enableLookups:關閉DNS查詢 在實現中,我們發現使用該配置,連接數上去之后很難下降,導致CPU一直維持在一個比較高的水平.
后來我們換了一種連接方式,采用線程池的方式,首先定義一個Executor:
<Executor name="tomcatThreadPool" namePrefix="tomcatThreadPool-" maxThreads="1000" maxIdleTime="300000" minSpareThreads="200"/>
參數的意義和上述相同
在Connector中使用定義的這個連接池:
<Connector executor="tomcatThreadPool" port="20003" protocol="HTTP/1.1" acceptCount="800" minProcessors="300" maxProcessors = "1000" redirectPort="8443" />
minProcessors,maxProcessors與上面的minSpareThreads,maxThreads意義差不多. 使用連接池以后,發現連接數上升后如果一段時間沒有請求了,連接數會很快下降,CPU的消耗得到了有效的降低, 處理能力得到了增強.
如何查看當前tomcat的連接數呢?
假設服務器上開啟了 2個tomcat實例,分別監聽8040和8050端口
netstat -na | grep ESTAB | grep 8040 | wc -l
netstat -na | grep ESTAB | grep 8050 | wc -l
二者之和,就是所有tomcat的連接數