Linux檢視連線數,併發數
阿新 • • 發佈:2019-02-20
軟連線
Bat程式碼- ln -s /home/ictfmcg/data/photo /var/jtnd/data/photo
tomcat 6的Connector配置如下
Xml程式碼
- <Connector port="8080" protocol="HTTP/1.1"
- connectionTimeout="20000"
- redirectPort="8443"
- maxThreads="800" acceptCount="1000"/>
其中最後兩個引數意義如下:
maxThreads:tomcat起動的最大執行緒數,即同時處理的任務個數,預設值為200
acceptCount:當tomcat起動的執行緒數達到最大時,接受排隊的請求個數,預設值為100
這兩個值如何起作用,請看下面三種情況
情況1:接受一個請求,此時tomcat起動的執行緒數沒有到達maxThreads,tomcat會起動一個執行緒來處理此請求。
情況2:接受一個請求,此時tomcat起動的執行緒數已經到達maxThreads,tomcat會把此請求放入等待佇列,等待空閒執行緒。
情況3:接受一個請求,此時tomcat起動的執行緒數已經到達maxThreads,等待佇列中的請求個數也達到了acceptCount,此時tomcat會直接拒絕此次請求,返回connection refused
maxThreads如何配置
一般的伺服器操作都包括量方面:1計算(主要消耗cpu),2等待(io、資料庫等)
第一種極端情況,如果我們的操作是純粹的計算,那麼系統響應時間的主要限制就是cpu的運算能力,此時maxThreads應該儘量設的小,降低同一時間內爭搶cpu的執行緒個數,可以提高計算效率,提高系統的整體處理能力。
第二種極端情況,如果我們的操作純粹是IO或者資料庫,那麼響應時間的主要限制就變為等待外部資源,此時maxThreads應該儘量設的大,這樣才能提高同時處理請求的個數,從而提高系統整體的處理能力。此情況下因為tomcat同時處理的請求量會比較大,所以需要關注一下tomcat的虛擬機器記憶體設定和linux的open file限制。
我在測試時遇到一個問題,maxThreads我設定的比較大比如3000,當服務的執行緒數大到一定程度時,一般是2000出頭,單次請求的響應時間就會急劇的增加,
百思不得其解這是為什麼,四處尋求答案無果,最後我總結的原因可能是cpu線上程切換時消耗的時間隨著執行緒數量的增加越來越大,
cpu把大多數時間都用來在這2000多個執行緒直接切換上了,當然cpu就沒有時間來處理我們的程式了。
以前一直簡單的認為多執行緒=高效率。。其實多執行緒本身並不能提高cpu效率,執行緒過多反而會降低cpu效率。
當cpu核心數<執行緒數時,cpu就需要在多個執行緒直接來回切換,以保證每個執行緒都會獲得cpu時間,即通常我們說的併發執行。
所以maxThreads的配置絕對不是越大越好。
現實應用中,我們的操作都會包含以上兩種型別(計算、等待),所以maxThreads的配置並沒有一個最優值,一定要根據具體情況來配置。
最好的做法是:在不斷測試的基礎上,不斷調整、優化,才能得到最合理的配置。
acceptCount的配置,我一般是設定的跟maxThreads一樣大,這個值應該是主要根據應用的訪問峰值與平均值來權衡配置的。
如果設的較小,可以保證接受的請求較快相應,但是超出的請求可能就直接被拒絕
如果設的較大,可能就會出現大量的請求超時的情況,因為我們系統的處理能力是一定的。
1、檢視apache當前併發訪問數: www.2cto.com
Bat程式碼
- netstat -an | grep ESTABLISHED | wc -l
對比httpd.conf中MaxClients的數字差距多少。
2、檢視有多少個程序數:
Bat程式碼
- ps aux|grep httpd|wc -l
3、可以使用如下引數檢視資料
server-status?auto
Bat程式碼
- #ps -ef|grep httpd|wc -l
1388
統計httpd程序數,連個請求會啟動一個程序,使用於Apache伺服器。
表示Apache能夠處理1388個併發請求,這個值Apache可根據負載情況自動調整。
Bat程式碼
- #netstat -nat|grep -i "80"|wc -l
4341
netstat -an會列印系統當前網路連結狀態,而grep -i "80"是用來提取與80埠有關的連線的,wc -l進行連線數統計。 www.2cto.com
最終返回的數字就是當前所有80埠的請求總數。
Bat程式碼
- #netstat -na|grep ESTABLISHED|wc -l
376
netstat -an會列印系統當前網路連結狀態,而grep ESTABLISHED 提取出已建立連線的資訊。 然後wc -l統計。
最終返回的數字就是當前所有80埠的已建立連線的總數。
Bat程式碼
- netstat -nat||grep ESTABLISHED|wc
- 可檢視所有建立連線的詳細記錄
檢視Apache的併發請求數及其TCP連線狀態:
Linux命令:
Bat程式碼
- netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
返回結果示例:
LAST_ACK 5
SYN_RECV 30
ESTABLISHED 1597
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057
其中的
SYN_RECV表示正在等待處理的請求數;
ESTABLISHED表示正常資料傳輸狀態;
TIME_WAIT表示處理完畢,等待超時結束的請求數。(這個引數還不太懂,為啥是等待超時結束,請大神指教)
轉載來自http://duanfei.iteye.com/blog/1894387