轉自:https://www.chenweiliang.com/cwl-1029.html
當我們學會了用Linux VPS 服務器來建站后,有必要了解load average各種負載平均值的含義,因為我們需要使用top
命令了解系統的完成狀態,關注變量的實時變化。
要理解這一點,就需要了解以下變量說明。
top 命令 load average 詳解
以下是如何使用它的詳細說明 ▼
top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48 Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 191272k total, 173656k used, 17616k free, 22052k buffers Swap: 192772k total, 0k used, 192772k free, 123988k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd 14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top 1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init 2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
- 統計信息區域的前5行,是整個系統的統計數據。
- 第1行是任務隊列信息,與
uptime
命令的執行結果相同。
其內容如下:
- 01:06:48 當前時間
- up 1:22 系統運行時間,格式為時:分
- 1 user 當前登錄用戶數
- load average: 0.06, 0.60, 0.48 系統負載,即任務隊列的平均長度。
- 3個數值分別為 1分鍾、5分鍾、15分鍾前到現在的平均值。
- 第2和第3行是進程和CPU信息。
當有多個CPU時,此內容可能超過2行。內容如下:
- Tasks: 29 total 進程總數
- 1 running 正在運行的進程數
- 28 sleeping 睡眠的進程數
- 0 stopped 停止的進程數
- 0 zombie 僵屍進程數
- Cpu(s): 0.3% us 用戶空間占用CPU百分比
- 1.0% sy 內核空間占用CPU百分比
- 0.0% ni 用戶進程空間內改變過優先級的進程占用CPU百分比
- 98.7% id 空閑CPU百分比
- 0.0% wa 等待輸入輸出的CPU時間百分比
- 0.0% hi
- 0.0% si
以下是最后兩2行內存信息:
- Mem: 191272k total 物理內存總量
- 173656k used 使用的物理內存總量
- 17616k free 空閑內存總量
- 22052k buffers 用作內核緩存的內存量
- Swap: 192772k total 交換區總量
- 0k used 使用的交換區總量
- 192772k free 空閑交換區總量
- 123988k cached 緩沖的交換區總量。
內存的內容被換出到交換區域,然后又被交換到內存中,但尚未被覆蓋使用過的交換區域。
此值是內容已存在於內存中的交換區域的大小。
當再次交換相應的存儲器時,不再需要寫入交換區域。
進程的詳細信息,顯示在每個進程信息區域的統計區域下方。
首先,讓我們來了解每個列的含義。
列名含義
- PID 進程id
- PPID 父進程id
- RUSER Real user name
- UID 進程所有者的用戶id
- USER 進程所有者的用戶名
- GROUP 進程所有者的組名
- TTY 啟動進程的終端名。不是從終端啟動的進程則顯示為 ?
- PR 優先級
- NI nice值。負值表示高優先級,正值表示低優先級
- P 最后使用的CPU,僅在多CPU環境下有意義
- %CPU 上次更新到現在的CPU時間占用百分比
- TIME 進程使用的CPU時間總計,單位秒
- TIME+ 進程使用的CPU時間總計,單位1/100秒
- %MEM 進程使用的物理內存百分比
- VIRT 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
- SWAP 進程使用的虛擬內存中,被換出的大小,單位kb。
- RES 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
- CODE 可執行代碼占用的物理內存大小,單位kb
- DATA 可執行代碼以外的部分(數據段+棧)占用的物理內存大小,單位kb
- SHR 共享內存大小,單位kb
- nFLT 頁面錯誤次數
- nDRT 最后一次寫入到現在,被修改過的頁面數。
- S 進程狀態。
- D=不可中斷的睡眠狀態
- R=運行
- S=睡眠
- T=跟蹤/停止
- Z=僵屍進程
- COMMAND 命令名/命令行
- WCHAN 若該進程在睡眠,則顯示睡眠中的系統函數名
- Flags 任務標志,參考 sched.h
linux load average 調試說明
在查看了top
命令所顯示的狀態后,需要依據其來做優化,但top
命令顯示的只是表象,所以我們可以通過iostat
或者vmstat
命令進一步的觀察。
vmstat 查看系統負載
vmstat procs -------memory-------- ----swap-- -----io---- --system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 100152 2436 97200 289740 0 1 34 45 99 33 0 0 99 0
procs
- r 列表示運行和等待cpu時間片的進程數,如果長期大於1,說明cpu不足,需提高cpu。
- b 列表示在等待資源的進程數,比如正在等待I/O、或者內存交換等。
cpu 表示cpu的使用狀態
- us 列顯示了用戶方式下所花費 CPU 時間的百分比。us的值比較高時,說明用戶進程消耗的cpu時間多,但是如果長期大於50%,需要考慮優化用戶的程序。
- sy 列顯示了內核進程所花費的cpu時間的百分比。這里us + sy的參考值為80%,如果us+sy 大於 80%說明可能存在CPU不足。
- wa 列顯示了IO等待所占用的CPU時間的百分比。
- 這里wa的參考值為30%,如果wa超過30%,說明IO等待嚴重,這可能是磁盤大量隨機訪問造成的,也可能磁盤或者磁盤訪問控制器的帶寬瓶頸造成的(主要是塊操作)。
- id 列顯示了cpu處在空閑狀態的時間百分比。
以下文章說明了Linux Load Average過高多少合適?