cpu內存和磁盤
cpu,內存和磁盤的關系:cpu取數據時,cpu發出指令先去內存找,內存找不到再去磁盤找,找到後從磁盤讀到內存然後加載到cpu。cpu是執行任務,內存和磁盤是存儲的。他們三個是相互制約相互依賴。所以有瓶頸時需要綜合考慮。
例如,cpu很高可能是內存導致的,像垃圾回收,內存不足時需要消耗cpu做垃圾回收。
運行隊列:一核cpu在同一時刻只能處理一個任務。例如來了一個線程,處於準備運行狀態,cpu把它取出來執行。如果來了多個可運行狀態的線程,這一個核的cpu只能執行一個,其他需要去排隊,這就形成一個隊列。排隊的線程越多對cpu的壓力越大。可運行狀態的線程在排隊時在不斷搶奪cpu資源。
在不同工具裏運行隊列名字不一樣:top裏load average 就是隊列數,三個時間段的平均值。vmstat裏r列是隊列數。spotlight裏是queue length 。
context switches上下文切換:cpu處理排隊的線程是在不斷的切換的,例如執行第一個線程一分鐘,然後切換到第二個線程二分鐘,這樣不斷切換中,讓大家感覺到cpu都在處理所有線程。
interrupts中斷:就是cpu正在處理某個線程時被打斷,就是優先級更高。中斷一般都是硬件引起的,比如鼠標和鍵盤,優先級最高。
在vmstat中in是中斷,cs是上下文切換。
cpu利用率:在windows中有個線程是sysrem idel process,就是cpu空閑利用率,這個越高就是cpu越閑。cpu利用率就是在一小時內有50分鐘在處理這個線程,利用率就是50/60。在多核處理器中我們會看到多個線程都是很高的利用率,是因為多核都在處理。
vmstat中id就是idel空閑。越大cpu越空閑。
壓測時cpu很閑也有問題。說明cpu壓不上去
vmstat中us是用戶態cpu,sy是內核態cpu,上下文切換多就是sy高。基於網絡環境下,網絡環境有io引起中斷,需要消耗sy,所以us:sy最好是7:3。
vmstat 中的id 是真空閑 , wa 是等待io的空閑就是一直等待io讀寫。
cpu內存和磁盤