1. 程式人生 > 其它 >理解CPU、記憶體、磁碟三者之間關係

理解CPU、記憶體、磁碟三者之間關係

如何理解CPU、記憶體、磁碟的關係?

這些子系統之間關係是彼此聯絡,相互彼此依賴的

1.程序

對於程序來說,資料是存放在記憶體中的,程序的執行需要使用CPU,程序讀寫資料需要跟磁碟打交道。

2.記憶體

當記憶體不足時需要跟磁碟進行頁(page)交換,swap交換,從而產生磁碟IO。po,so釋放實體記憶體,pi,si增加實體記憶體使用。交換分頁的過程需要佔用cpu時間。 (記憶體佔用過高)

3.磁碟

當磁碟IO負載過高時,需要監控swap和系統分割槽,要確保virtual memory不是檔案系統I/O 的瓶頸。磁碟的相當慢的,當iowait 增長,表示CPU花費大量的時間在等待磁碟IO,此時CPU Bound的應用處理將受到影響(磁碟IO過高)

4.如何理解paging in / paging out ?

  • 在Linux記憶體管理中,主要是通過“調頁Paging”和“交換Swapping”來完成上述的記憶體排程。調頁演算法是將記憶體中最近不常使用的頁面換到磁碟上,把活動頁面保留在記憶體中供程序使用。交換技術是將整個程序,而不是部分頁面,全部交換到磁碟上。
  • 分頁(Page)寫入磁碟的過程被稱作Page-Out,分頁(Page)從磁碟重新回到記憶體的過程被稱作Page-In。當核心需要一個分頁時,但發現此分頁不在實體記憶體中(因為已經被Page-Out了),此時就發生了分頁錯誤(Page Fault)。
  • 當系統核心發現可執行記憶體變少時,就會通過Page-Out來釋放一部分實體記憶體。經管Page-Out不是經常發生,但是如果Page-out頻繁不斷的發生,直到當核心管理分頁的時間超過執行程式的時間時,系統效能會急劇下降。這時的系統已經執行非常慢或進入暫停狀態,這種狀態亦被稱作thrashing(顛簸)。
  • 可以通過vmstat -s 檢視 paged in/out 數量

5.如何監控作業系統的資源?

  • CPU監控:top(利用率), uptime(執行佇列數), vmstat(上下文切換數), jprofile(方法佔用cpu時間百分比)
  • 記憶體監控:top, free(利用率), vmstat(page和swap交換), pidstat -r和sar -B(page fault), jmap -heap(堆dump), mat和jprofiler(檢視物件)
  • 磁碟監控:iostat(%util), top(iowait%), pidstat -d
  • 網路監控:netstat(連線數), nethogs(流量), wireshark和tcpdump(抓包)
  • JVM監控:jstat(gc), jmap(堆dump), jstack(執行緒dump), jprofiler和visualvm(剖析工具)
  • nmon(長時間全域性收集資料)

6.如何理解上下文切換(context switch)?

  每個CPU(或多核CPU中每個核心)在同一時間只能執行一個執行緒,Linux採用搶佔式排程。即為每個執行緒分配一定的執行時間,當到達執行時間,執行緒中有IO阻塞或高優先順序執行緒要執行時,Linux將切換執行的執行緒,在切換時要儲存目前執行緒的執行狀態,並恢復要執行的執行緒狀態,這個過程稱之為上下文切換。對於java應用,典型的是在進行檔案IO操作,網路IO操作,鎖等待或執行緒sleep時,當前執行緒會進入阻塞或者休眠狀態,從而觸發上下文切換,上下文切換過多會造成核心佔用過多的CPU使用,使得應用的響應速度下降。

  vmstat其中cs那一列

7.如何理解磁碟IO?

  • 磁碟IO速度是非常慢的,linux核心就是要儘量降低IO
  • 記憶體不足時會進行頁交換,產生磁碟IO
  • CPU Bound型別應用,當磁碟IO過多,iowait過大時會影響效能。