linux的cpu負載

CPU負載

什麼是cpu負載:負載就是cpu在一段時間內正在處理以及等待cpu處理的進程數之和的統計信息,也就是cpu使用隊列的長度統計信息,這個數字越小越好(如果超過CPU核心*0.7就是不正常)

查看cpu負載

怎麼查看cpu負載?有好幾種方式。

1、w命令。

Linux w命令用於顯示目前登入系統的用戶信息。執行這項指令可得知目前登入系統的用戶有哪些人,以及他們正在執行的程序。但是w命令輸出的第一行,也有cpu負載的信息。w命令會在第一行顯示下列信息:當前時間、系統運行了多久時間、當前登錄的用戶有多少,以及前 1、5 和 15 分鐘系統的平均負載。

 14:23:49 up 276 days,  4:15,  6 users,  load average: 2.13, 0.77, 0.41
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/7    30.15.153.33     09:54    3:24m  0.49s  0.46s mysql -h

2、uptime命令,輸出的信息同w命令的第一行。

#uptime
 14:28:13 up 276 days,  4:19,  6 users,  load average: 2.15, 2.95, 1.52

3、top命令。也是大多數人用的最多的命令。

top - 14:40:15 up 276 days,  4:31,  6 users,  load average: 0.61, 1.18, 1.58
Tasks: 244 total,   1 running, 238 sleeping,   4 stopped,   1 zombie
Cpu(s):  3.3%us,  0.9%sy,  0.0%ni, 95.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  16467424k total, 16358540k used,   108884k free,   166780k buffers
Swap:        0k total,        0k used,        0k free,  5494548k cached

第一行:同uptime

第三行:cpu(s),裏面這幾個需要解釋下。

  • us(user cpu time):用戶態使用的cpu時間比。該值較高時,說明用戶進程消耗的 CPU 時間比較多,比如,如果該值長期超過 50%,則需要對程序算法或代碼等進行優化。
  • sy(system cpu time):系統態使用的cpu時間比。
  • ni(user nice cpu time):用做nice加權的進程分配的用戶態cpu時間比
  • id(idle cpu time):空閒的cpu時間比。如果該值持續爲0,同時sy是us的兩倍,則通常說明系統則面臨着 CPU 資源的短缺。
  • wa(io wait cpu time):cpu等待磁盤寫入完成時間。該值較高時,說明IO等待比較嚴重,這可能磁盤大量作隨機訪問造成的,也可能是磁盤性能出現了瓶頸。
  • hi(hardware irq):硬中斷消耗時間
  • si(software irq):軟中斷消耗時間
  • st(steal time):虛擬機偷取時間

這一行所有值加起來應該等於100%。

在Linux/Unix下,CPU利用率分爲用戶態,系統態和空閒態,分別表示CPU處於用戶態執行的時間,系統內核執行的時間,和空閒系統進程執行的時間。平時所說的CPU利用率是指:CPU執行非系統空閒進程的時間 / CPU總的執行時間。

 

CPU負載高


cpu低而負載高也就是說等待磁盤I/O完成的進程過多,就會導致隊列長度過大,這樣就體現到負載過大了,但實際是此時cpu被分配去執行別的任務或空閒。

場景一:磁盤讀寫請求過多就會導致大量I/O等待。
cpu的工作效率要高於磁盤,而進程在cpu上面運行需要訪問磁盤文件,這個時候cpu會向內核發起調用文件的請求,讓內核取磁盤取文件,這個時候會切換到其他進程,這個任務會變成不可中斷睡眠狀態。

注:與不可中斷睡眠狀態相對的是可中斷睡眠狀態。

不可中斷睡眠:是短時間的等待狀態。例如磁盤輸入輸出等待。被IO阻塞的進程。
可中斷睡眠:爲恢復時間無法預測的長時間等待狀態。如,來自鍵盤設備的輸入。

場景二:MySQL中存在沒有索引的語句或存在死鎖等情況。

mysql的數據是存儲在硬盤中,如果需要進行sql查詢,需要先把數據從磁盤加載到內存中。當數據特別大的時候,如果執行的sql語句沒有索引,就會造成掃描表的行數過大導致I/O阻塞,或者語句中存在死鎖,也會造成I/O阻塞,從而導致不可中斷睡眠進程過多,導致負載過大。

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章