發布時間:2020-07-23
高并發系統的優化一直以來都是一個很重要的問題,今天小編和大家聊聊高并發系統的一些性能調優和優化策略。
系統性能的關鍵指標
吞吐量(Throughput) 系統單位時間內處理任務的數量;
延遲(Latency) 系統對單個任務的平均響應時間;
一般來說,考量一個系統的性能主要看這兩個指標。而這兩個指標之間又存在著一些聯系:對于指定的系統來說,系統的吞吐量越大,處理的請求越多,服務器就越繁忙,響應速度就會慢下來;而延遲越低的系統,能夠承載的吞吐量也相應的更高一些。
一方面,我們需要提高系統的吞吐量,以便服務更多的用戶,另一方面我們需要將延遲控制在合理的范圍內,以保證服務質量。
系統性能測試
業務場景
對于不同的業務系統,可以接受的延遲(Latency)也有所不同,例如郵件服務可以忍受的延遲顯然要比Web服務高得多,所以首先我們需要根據業務場景的不同來定義理想的Latency值。
我們需要一個能夠制造高吞吐的工具來測試系統的性能,PerformanceRunner是國內領先的支持http、https、websocket、tcp/ip、MQ等各種協議、10萬+海量并發、精準可靠的性能測試工具,極大地降低了應用系統運行風險。
測試流程
測試的過程中需要不斷加大吞吐量,同時注意觀察服務端的負載,如果負載沒有問題,那就觀察延遲。一般這個過程需要反復很多次才能測出系統的極限值,而每次測試消耗的時間也比較長,需要耐心一些。
通用的系統參數調優
Linux內核默認的參數考慮的是最通用的場景,不能夠滿足高并發系統的需求。
內存:對于單個Socket連接來說消耗內存不多,但是幾萬甚至幾十萬個連接疊加起來就非常可觀了,配置不當會導致壓測端內存成為瓶頸。
網絡:有時候為了避免網絡擁塞,需要限制壓測客戶機的帶寬,使流量以比較平滑的速率發送和接收。
定位系統性能瓶頸:當系統吞吐和延遲上不去時,首先需要定位問題,而不是急于修改代碼。常見的性能瓶頸包括CPU/內存/磁盤IO/網絡帶寬等,其中每一項都有一到多個簡單實用的工具: 對于CPU和內存,我們只要使用top就可以了;對于磁盤IO,可以用iotop或iostat;對于網絡帶寬,可以使用iftop。
如果依然沒能定位到問題,可能系統配置不當,參考通用的系統參數調優。最后檢查代碼是否有單點瓶頸,例如程序被阻塞了:在筆者實測過程中,發現每個用戶創建會話進程都需要對同一個supervisor發起同步請求,同時登錄的用戶數量很大時,這些同步請求會排隊,甚至引發超時。
以上就是小編收集的做壓力測試時遇到的一些問題以及應對辦法,鑒于筆者水平有限,錯漏難免。
更多并發測試推薦閱讀:
如何開展數據庫系統的性能需求分析?如何制定數據庫能力評估模型?
您的信息已成功提交!
我們的客服人員稍后會與您聯系