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