伺服器壓力測試心得

2021-07-14 13:17:23 字數 958 閱讀 3301

最近完成了乙個伺服器框架, 於是測試的他的qps,發現了乙個奇怪的問題,測試出來qps只有3w/s,與前面說的10w/s,有很大的差距。使用trace命令列印出glibc函式呼叫資訊,發現了大部分的時間程式處於鎖等待狀態,我開始懷疑認為是內部使用鎖占用太多時間。於是乎改為無鎖佇列。(關於無鎖佇列已經記錄).修改完畢後,發現了如下幾個問題:

1:業務處理執行緒消耗大量的cpu時間,因為採用了輪詢,一直空跑cpu。

2:使用了無鎖佇列並沒有提公升qps。

這讓不僅陷入了沉思,使用ifstat命令,檢視網路流量包,如圖:

流量上不去,懷疑是網路頻寬問題,區域網內100mbps,換算單位為12.5m/s,通過檔案拷貝測試,不是貸款問題,難道是機器問題。於是乎對測試伺服器和本地機器進行比較,

使用lscpu命令檢視,配置基本相同。於是跑到遠端測試伺服器上面去測試,發現qps可以達到10w/s,這下子我更加鬱悶了,搜尋了乙個下午,還是我的同事提醒了我,網絡卡不同,使用cat /proc/interrupts 檢視中斷響應分布,如圖:

網絡卡中斷響應分布在乙個cpu中,在看看測試伺服器的資訊:

原因:因為測試qps屬於io密集型,這樣網絡卡就會頻繁產生網路軟中斷,但是在本地機器上面沒有網絡卡多佇列,使得cpu0的si時間占用到%100,緩衝區滿,出現丟包問題,這樣ifstat流量根本上不去,那麼程序會處於阻塞等待狀態。這也是我本地程序cpu占有率上不去的原因,而多佇列網絡卡可以將訊號中斷分散多個cpu(中斷由irqblance進行負載均衡)。

結果:問題得到解決。

後端伺服器的壓力測試

比如我要測試伺服器的連線數最大能達到多少?以前測試的方法是乙個客戶端開啟n個執行緒 n 1000 或者2000,3000 但是並沒有達到測試的效果。做過一些測試,基本方法是啟動乙個客戶端,通過多個執行緒來同時來連線客戶端,乙個執行緒相當於乙個客戶端連線,執行緒數量是可控制的,設定引數一般為 100,...

測試web伺服器的壓力測試程式

以下 是自己寫的乙個測試web伺服器的壓力測試程式,採用epoll多路分發模型,雖然是單執行緒但可以產生足夠的壓力。感興趣的同學可以修改一下測試自己的伺服器程式。include include include include include include include include inclu...

C 實現伺服器壓力測試框架

c 實現伺服器壓力測試框架 flyfish 2015 3 9 模擬大量客戶端對伺服器進行壓力測試框架 標頭檔案 pragma once include include include include include class csession public boost enable shared ...