動態查看進程信息 -- 基於 top 命令工具(祝大家五一節快樂!)

個人博客首頁(點擊查看詳細信息)

 

1、簡介

    系統 服務器 負載、CPU、內存、進程 等信息 反應 當前服務的運行狀態,top 可以獲取 這些 相關信息(當然,除了 top 之外 還有 很多 工具可以獲取這些 信息 -- 例如 htop、iotop ...,本文 主要介紹 top)
    

2、執行命令

## 命令 很簡單,直接 命令行 輸入 top 按回車之後,彈出一個 交互界面
# top

    

3、結果 分析

    top 結果我們 從上往下,按行 依次分析
    

3.1 first line(系統相關)

## top - 03:51:27 up 1 day, 22:17, 4 users, load average: 8.08, 8.07, 8.01
## top --  當前程序的名稱
## 03:51:27  --  當前系統時間
## up 1 day, 22:17  --  當前系統已經運行的時間(可以 用來判斷 機器最近是否關機重啓)
## 4 users  --  當前登錄系統的用戶數量
## load average: 8.08, 8.07, 8.01  --  分別對應1、5、15分鐘內cpu的平均負載

    

3.1.1 load average 詳細介紹

3.1.1.1 簡介

    load average 是對當前 CPU 工作量的度量,指運行隊列的平均長度(也就是等待 CPU 的平均進程數相關的一個計算值);wikipedia 中的解釋是 "the system load is a measure of the amount of work that a computer system is doing"
    

3.1.1.2 判斷標準

    我們該如何看待這個load average 數據呢?假設我們的系統是單 CPU、單內核的,把它比喻成是一條單向的橋,把CPU任務比作汽車

  • load = 0 的時候意味着這個橋上並沒有車,cpu 沒有任何任務
  • load < 1 的時候意味着橋上的車並不多,一切都還是很流暢的,cpu 的任務並不多,資源還很充足;( load < 0.7 可以不去關注他;0.7< load < 1 的時候就需要稍微關注一下了,雖然還可以應付但是這個值已經離臨界不遠了)
  • load = 1 的時候就意味着橋已經被車給沾滿了,沒有一點空隙,cpu 的已經在全力工作了,所有的資源都被用完了,當然還好,這還在能力範圍之內,只是有點慢而已(需要警惕了,因爲這個時候已經沒有更多的資源的了,已經在全力以赴了)
  • load > 1 的時候就意味着不僅僅是橋上已經被車佔滿了,就連橋外都被佔滿了,cpu 已經在全力的工作了,系統資源的用完了,但是還是有大量的進程在請求,在等待(若是這個值 > 5 說明系統已經在超負荷運作了)
        

備註:CPU相關信息查看(個數、內核數)

## 查看物理CPU的個數
# cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l

## 每個cpu的核心數
# cat /proc/cpuinfo | grep "physical id" | grep "0" | wc -l

    

3.1.2 uptime(獲取同樣的內容)

## uptime 命令 獲取的命令 就是 first line的內容
# uptime 
10:13:18 up 35 days, 19:09,  4 users,  load average: 0.18, 0.31, 0.39

    

3.2 second line(進程總覽)

## Tasks: 211 total, 9 running, 202 sleeping, 0 stopped, 0 zombie
## Tasks: 211 total  --  進程總數
## 9 running  --  正在運行的進程數
## 202 sleeping  --  休眠的進程數
## 0 stopped  --  停止的進程數
## 0 zombie  --  殭屍進程數

    

3.3 third line(CPU 相關)

## %Cpu(s): 20.4 us, 77.2 sy, 9.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 2.5 si, 0.0 st
## %Cpu(s): 20.4 us  --  用戶空間進程 佔用 CPU百分比
## 77.2 sy  --  內核空間 運行 佔用 CPU百分比
## 9.0 ni  --  用戶進程空間內改變過優先級的進程佔用CPU百分比
## 0.0 id  --  空閒CPU百分比
## 0.0 wa  --  等待輸入輸出的CPU時間百分比
## 0.0 hi  --  硬中斷(Hardware IRQ)佔用CPU的百分比
## 2.5 si  --  軟中斷(Software IRQ)佔用CPU的百分比
## 0.0 st  --  (Steal time) 是 hypervisor 等虛擬服務中,虛擬 CPU 等待實際 CPU 的時間的百分比

    

備註:CPU 利用率 和 CPU Load 這兩個指標並不一樣
    CPU 利用率是對一個時間段內 CPU 使用狀況的統計,通過這個指標可以看出在某一個時間段內 CPU 被佔用的情況
    Load Average 是 CPU 的 Load,它所包含的信息不是 CPU 的使用率狀況,而是在一段時間內 CPU 正在處理以及等待 CPU 處理的進程數情況統計信息

3.4 fourth line(內存相關)

## KiB Mem: 2048352 total, 1107672 free, 74396 used, 866284 buff/cache
## 2048352 total  --  物理內存總量
## 1107672 free  --  使用的物理內存總量
## 74396 used  --  空閒內存總量
## 866284 buff/cache  --  內核緩存的內存量
備註:
系統中可用的物理內存最大值並不是 free 這個單一的值,而是 free + buffers + swap 中的 cached 的和(可以參考 "Linux 內存釋放(基本操作)" 一文)

3.5 fifth line(交換分區相關)

## KiB Swap: 1048572 total, 959080 free, 89492 used. 1804676 avail Mer
## 1048572 total  --  交換區總量
## 959080 free  --  空閒交換區總量
## 89492 used  --  使用的交換區總量
## 1804676 avail Mer  --  XXXXXX

    

3.6 sixth line(進程詳細狀態)

## PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
## PID  --  進程id
## USER  --  進程的所屬用戶
## PR  --  進程執行的優先級 priority 值
## NI  --  進程的 nice 值
## VIRT  --  進程任務所使用的虛擬內存的總數
## RES  --  進程所使用的物理內存數,也稱之爲駐留內存數
## SHR  --  進程共享內存的大小
## S  --  進程進程的狀態: S=sleep R=running Z=zombie
## %CPU  --  進程CPU的利用率
## %MEM  --  進程內存的利用率
## TIME+  --  進程活躍的總時間
## COMMAND  --  進程名

    

3.6.1 優先級

3.6.1.1 PR(動態優先級)

    PR 值表示 Priority 值叫動態優先級,是進程在內核中實際的優先級值(進程優先級的取值範圍是通過一個宏定義的,這個宏的名稱是 MAX_PRIO,它的值爲 140)

  • 取值範圍是從 0-139,值越小,優先級越高
  • 0 - 99 是實時進程的值,100 - 139 是給用戶的
        

3.6.1.2 NI(靜態優先級)

    NICE 值叫做靜態優先級,是用戶空間的一個優先級值,其取值範圍是-20至19

  • 0 是默認的值, -20 優先級最高,而 19 優先級最低
  • 值越小,表示進程”優先級”越高,值越大“優先級”越低nice
備註:PR 與 NI
    PR 中的 100 to 139 值部分有這麼一個對應 PR = 100 + 20 + (-20 to +19),這裏的 -20 to +19 便是nice值,所以說兩個雖然都是優先級,而且有千絲萬縷的關係,但是他們的值,他們的作用範圍並不相同(暫未詳細探究)

3.6.2 虛擬內存(VIRT)

    任務所使用的虛擬內存的總數,其中包含所有的代碼,數據,共享庫和被換出 swap空間的頁面等所佔據空間的總數(暫未詳細探究)
    

4、交互操作

    在交互 界面,我也 也可 根據自身需求,進行 交互操作

###
### 邊使用 邊記錄,後期不斷完善
###
## 按鍵 "h"  --  交互界面 幫助手冊,按鍵 "q" 則 退出幫助,返回 交互界面
## 按鍵 "q"  --  退出,返回命令行
## 按鍵 "l"  --  "first line" 顯示/關閉 開關
## 按鍵 "M"  --  "fourth line"、"fifth line" 顯示/關閉 開關

    

5、命令行 操作

    很多時候,我們 只需要 查看 某一類 信息,不需要 查看 所有 信息,此時 我們可以 直接 通過 命令行 參數 來進行 操作
    

5.1 幫助信息

# top -h
    

5.2 信息刷新 間隔

## 進入 top 交互界面,某些 應用 不需要 每秒 更新信息,此時 top 可以 設置 時間間隔
# top -d {time_sec}

    

5.3 指定項 排序

## 默認 按 %CPU 這項 降序 排列,也可以 指定 別的項
## ## PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 任意某一項
# top -o {opt}

    

5.4 用戶進程

## 只顯示 指定用戶 的進程信息
# top -u {user_name}

    

5.5 顯示當前 活動 進程的信息

# top -i

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