服務器上下文切換太多?這里有解決辦法!

本文章轉載于搜狗測試

近期在一個性能測試項目中遇到了一個調優的過程。分享一下給大家。

1、?第一次打壓時,發現A請求壓力80tps后,cpu占用就非常高了(24核的機器,每個cpu占用率全面飆到80%以上),且設置的檢查點沒有任何報錯。

2、?了解了一下后臺實現邏輯:大體是這樣的:服務器接到請求后,會再到另一臺kv服務器請求數據,拿回來數據后,根據用戶的機器碼做個性化運算,最后將結果返回給客戶端,期間會輸出一些調試log。

查了下,kv服務器正常,說明是本機服務服務器的問題。具體用vmstat命令看一下異常的地方。

3、?從圖中可以直觀的看出,bi、bo、in、cs這四項的值都很高,根據經驗,bi和bo代表磁盤io相關、in和cs代表系統進程相關。一個一個解決吧,先看io。

4、?用iostat –x命令看了下磁盤讀寫,果然,磁盤慢慢給堵死了。

5、?看了下過程,只有寫log操作才能導致頻繁讀寫磁盤。果斷關閉log。重新打壓試下。

6、?Bi和bo降到正常值了,說明磁盤的問題解決了。但是上下文切換數竟然達到了每秒40萬次!好可怕~

7、?只知道上下文切換數很大,怎么知道是在哪些進程間切換呢?

到網上搜了一個腳本,這個腳本用來統計特定時間內進程切換的top20并打印出來。

保存成cs.stp后,用stap cswmon.stp 5命令執行下。

8、發現是discover進程在反復和系統進程進行切換。因此消耗了大量資源。

9、從網上查了下減少切換進程的一些方法:

開發隨后改了下:將線程數開大了一倍,控制在一個進程中。

重新打壓了一下。發現上下文切換數降低到25萬次左右。

此時的性能數據可以達到每秒260次左右,遠遠高于之前的80次。已經達到可以上線的需求。

但是由于頁面中斷數和上下文切換數還是很高,后續還是需要優化~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容