理解load averages

Federico發表於2018-09-03

  今天在客戶的生產環境中遇到了網路丟包的問題,但是檢視我方部署smokeping監控發現對同一條線路監控,我方監控顯示正常,判斷丟包是由客戶伺服器負載過高導致,原因及排查思路如下:

使用uptime命令檢視雲主機負載

uptime

14:21:39 up 39 days, 22:18,  1 user,  load average: 22.03, 20.01, 23.05

  看到這個負載感覺目前整個作業系統已經很危險了,負載已經達到了20左右,客戶雲主機配置為8C8G。

理解Linux處理器負載平均值

  以上我們已經使用了uptime命令對當前的雲主機效能進行了檢視,但是需要明確的是load average值到底多少才算正常呢?我們如何判斷丟包的原因是不是因為伺服器負載過高導致的呢?
  load average三個數值分別代表不同時間段的系統負載情況(一分鐘、五分鐘、十五分鐘)那麼我們應該如何使用這三個值進行準確的判斷呢?實際上我們更應該注重五分鐘、十五分鐘的負載值,如果當前一分鐘的負載值升高,五分鐘以及十五分鐘負載值正常,那麼我們不需要過於擔心,很可能是暫時現象。如果十五分鐘負載值過大那就需要引起我們的注意了,需要我們對雲主機進行升級配置或對當前叢集進行擴容。
  那麼,問題又來了,現在我們知道檢視具體時間的負載值對嚴重程度進行分析了,那麼我們進一步就需要判斷負載值為多少才需要我們進行關注呢!
實際上負載值是與CPU個數和核數有關的,負載值不應該超過處理器核心數(本次例項負載值不應該超過8)

我們可以如下理解:單核CPU負載正常值不超過1,n核CPU處理器負載值不超過n。現在我們將CPU比作是一座跨海大橋,CPU的個數與核數比作是這座大橋的車道數,當CPU個數與核數為1伺服器負載為1時,可以理解為一條單行道的大橋上已經擁堵滿了車輛無法在繼續前行,後續車輛只能等待前方車輛通過後繼續前行,如果CPU個數或核數為8,相當於此條大小的可行車道數為8,理論情況下是當負載達到8時將所有車道堵滿無法通行,相信這樣就很好理解了。

  曾幾何時,我對多核和多個處理器有所誤解,就技術而言我接觸更多的是多核處理器,下面簡單的描述下他們之間的區別。

  • 多核處理器:將多個核心進行整合,例如:一個雙核處理器可以同時執行多個不同的程式,大大的提升了系統的處理速度,多個核心在一個晶片上,它們之間的通訊也更快,功耗更低,弊端是所有的壓力集中與一個物理處理器,壓力過大導致處理器達到瓶頸,有當機風險。
  • 多個處理器:伺服器上安裝多個處理器,例如:多個處理器分別處理不同的程式,同樣提高了系統的處理速度,但是多個CPU的功耗、體積更大,資料之間通訊更慢,這種分散式系統之間面臨著很多問題,如:一個處理器正在處理一個程式,突然出現故障,這個程式後續誰來處理?以及如何協調這些處理器進行工作,這些都是分散式計算將要面臨的挑戰。

  目前而言,多核處理器仍是市場主流。以上的解釋可以用下圖更形象的進行展示。
理解load averages

預警值

  如果將CPU比喻為人的話,負載值比喻為工作,我們當然不會讓手中的工作達到100%也就是1,所以當負載值超過50%時就需要我們警示了,儘快排查原因,如果真的是無法進行優化處理,那麼就儘快進行擴容。CPU真幸福壓力大了還可以罷工,人就不是了--活著幹,死了算。

相關文章