2009-11-25 13:45 佚名 理想中國
字型大小:t
| t
很多單位的伺服器都採用了linux作為伺服器作業系統,但是linux伺服器的最大併發處理數的演算法和windows伺服器的併發處理數演算法不一樣,本文介紹了linux伺服器的併發處理器的計算方法。
ad:
1、利用網路處理量計算。
計算參考公式:
併發 = connection established / min(server keepalive, server timeout)
翻譯一下:
併發 = 伺服器傳輸鏈結數 除以 伺服器軟體的keepalive設定和伺服器軟體的超時設定之間的最小值
這個公式算出來的數字是keepalive時間段內的平均值,比真實平均值要小一點,如果想找最大值就要設定keepalive為0或1,然後多探測幾次。
connection established是伺服器當前正在傳輸的鏈結,但是keepalive開啟時,新建立的傳輸鏈結會一直存在直到keepalive/timeout關閉鏈結;客戶端主動關閉鏈結的話connection established也會關閉,不過這種鏈結一般比較少,多數瀏覽器都是支援keepalive並遵守伺服器配置的。
在linux檢視connection established數字的辦法是在命令列執行:
netstat -est|grep "connections established"|cut -d "c" -f 1
keepalive和timeout數字檢視辦法要檢視web server軟體的配置檔案
注意:這個方法只能用於最前端的伺服器或7層交換機,前端之後的伺服器因為快取或鏈結方式的原因往往是不準確的。
2、利用伺服器日誌計算
因為伺服器每處理乙個請求,都會在日誌裡留下一條資訊,所以利用伺服器軟體的日誌來計算是最準確的,但是是這種計算方式浮動也可能會比較大,需要取最大值計算。
首先在確定伺服器軟體有將所有請求寫入乙個日誌檔案裡,並確保該日誌檔案正在不停記錄。
為節省時間和伺服器資源,把log檔案的最後一萬條記錄拿出來統計,我就用nginx預設的main格式作個例子:
執行命令:
tail -10000 nginx.log | awk '' | sort | uniq -c
命令的意思是取log檔案的最後一萬條記錄,然後用awk取得日誌檔案中表示時間的一列($4),接著再對該列進行一次排序,最後是用uniq把這一列相鄰的重複行合併,並計算合併的條數。
其中先sort再uniq是一種安全的做法,以確保同一秒的日誌先被歸到一起,然後再合併,這樣就不會有同一秒種的日誌會被切成幾段這樣的現象。
可以得到輸出:
23 [09/sep/2008:20:26:02
26 [09/sep/2008:20:26:03
17 [09/sep/2008:20:26:04
20 [09/sep/2008:20:26:05
...70 [09/sep/2008:20:29:43
61 [09/sep/2008:20:29:44
45 [09/sep/2008:20:29:45
37 [09/sep/2008:20:29:46
2 [09/sep/2008:20:29:47
在這些輸出中,第一條記錄和最後一條記錄因為時間有可能被切斷,所以是完全不可靠之資訊,可以忽略。
如果輸出少於10行的話,要擴大一下範圍,修改tail -10000為tail -100000取最後十萬條資料統計。
如果只需要看最大值,可以再用sort命令進行排序,並用head命令取出前10行記錄:
tail -10000 nginx.log | awk '' | sort | uniq -c | sort -nr | head
awk命令是乙個功能比較強的命令,在這裡只用到最簡單的awk '',意思是將日誌每行按空格切分開,然後切出來的結果依次從左到右就是$1 $2 $3 ...,nginx預設的main日誌時間字段剛好是$4,所以在這裡拿$4來計算。如果是別的格式的日誌,依照這個辦法去找到列數:
就拿apache預設的日誌來看,首先:
head -1 apache.log
得到類似以下的輸出:
用awk按空格來切分開之後,60.8.207.86就是$1,$2和$3都是-,[09/sep/2008:21:03:58是$4,這就是需要拿出來統計的。嗯,怎麼apache的日誌和nginx的一樣的?現在才發現。
那命令也基本沒什麼變化,執行一下:
tail -10000 apache.log | awk '' | sort | uniq -c | sort -nr | head
注意,如果是在squid伺服器後面的apache,則日誌會變成這樣:
因為日誌的第乙個段:x_forwarded_for中含有空格,所以時間的段會在$3、$4或$5之間變化,從而不能確定,可以先用一次awk或cut以[這個符號切分一下:
tail -10000 apache.log | awk -f"[" '' | awk '' | sort | uniq -c | sort -nr | head
或tail -10000 apache.log | cut -d"[" -f 2 | awk '' | sort | uniq -c | sort -nr | head
這樣統計就準確了。
ZT linux伺服器每秒併發處理數的計算方法
sudone.com 伺服器系統架構分析日誌 linux伺服器每秒併發處理數的計算方法 2010 04 13 11 10 14 1 利用網路處理量計算。併發 connection established min server keepalive,server timeout 翻譯一下 併發 伺服器傳...
伺服器併發處理架構
網路伺服器如何處理併發請求的模型稱之為多工體系結構。1.inetd模式 在大部分unix作業系統中,預設的多工體系結構是inetd應用程式。通用的網路伺服器體系結構inetd分為兩個部分 主服務程序和客戶服務程序。主服務程序通常用於等待客戶端的連線請求。一旦客戶端發起乙個請求,主伺服器將建立連線,同...
伺服器設計 處理併發請求
伺服器設計技術有很多,按使用的協議來分有tcp伺服器和udp伺服器。按處理方式來分有迴圈伺服器和併發伺服器。在網路程式裡面,一般來說都是許多客戶對應乙個伺服器,為了處理客戶的請求,對服務端的程式就提出了特殊的要求。目前最常用的伺服器模型有 迴圈伺服器 伺服器在同一時刻只能響應乙個客戶端的請求 併發伺...