服務器壓力測試心得

最近完成了一個服務器框架, 於是測試的他的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中,在看看測試服務器的信息:



eth1-TxRx-0是神馬意思,百度了一下,叫做網絡多隊列。這裏有8個隊列,網絡軟中斷均勻的分佈8核中。

原因:

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

結果:

問題得到解決。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章