系統 服務器 負載、CPU、內存、進程 等信息 反應 當前服務的運行狀態,top 能夠獲取 這些 相關信息(固然,除了 top 以外 還有 不少 工具能夠獲取這些 信息 -- 例如 htop、iotop ...,本文 主要介紹 top)
緩存
## 命令 很簡單,直接 命令行 輸入 top 按回車以後,彈出一個 交互界面 # top
top 結果咱們 從上往下,按行 依次分析
服務器
## 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 -- 分別對應一、五、15分鐘內cpu的平均負載
load average 是對當前 CPU 工做量的度量,指運行隊列的平均長度(也就是等待 CPU 的平均進程數相關的一個計算值);wikipedia 中的解釋是 "the system load is a measure of the amount of work that a computer system is doing"
ide
咱們該如何看待這個load average 數據呢?假設咱們的系統是單 CPU、單內核的,把它比喻成是一條單向的橋,把CPU任務比做汽車工具
備註:CPU相關信息查看(個數、內核數)ui
## 查看物理CPU的個數 # cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l ## 每一個cpu的核心數 # cat /proc/cpuinfo | grep "physical id" | grep "0" | wc -l
## uptime 命令 獲取的命令 就是 first line的內容 # uptime 10:13:18 up 35 days, 19:09, 4 users, load average: 0.18, 0.31, 0.39
## Tasks: 211 total, 9 running, 202 sleeping, 0 stopped, 0 zombie ## Tasks: 211 total -- 進程總數 ## 9 running -- 正在運行的進程數 ## 202 sleeping -- 休眠的進程數 ## 0 stopped -- 中止的進程數 ## 0 zombie -- 殭屍進程數
## %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 處理的進程數狀況統計信息
## 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 內存釋放(基本操做)" 一文)
## KiB Swap: 1048572 total, 959080 free, 89492 used. 1804676 avail Mer ## 1048572 total -- 交換區總量 ## 959080 free -- 空閒交換區總量 ## 89492 used -- 使用的交換區總量 ## 1804676 avail Mer -- XXXXXX
## 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 -- 進程名
PR 值表示 Priority 值叫動態優先級,是進程在內核中實際的優先級值(進程優先級的取值範圍是經過一個宏定義的,這個宏的名稱是 MAX_PRIO,它的值爲 140)命令行
NICE 值叫作靜態優先級,是用戶空間的一個優先級值,其取值範圍是-20至19code
備註:PR 與 NI PR 中的 100 to 139 值部分有這麼一個對應 PR = 100 + 20 + (-20 to +19),這裏的 -20 to +19 即是nice值,因此說兩個雖然都是優先級,並且有千絲萬縷的關係,可是他們的值,他們的做用範圍並不相同(暫未詳細探究)
任務所使用的虛擬內存的總數,其中包含全部的代碼,數據,共享庫和被換出 swap空間的頁面等所佔據空間的總數(暫未詳細探究)
blog
在交互 界面,我也 也可 根據自身需求,進行 交互操做排序
### ### 邊使用 邊記錄,後期不斷完善 ### ## 按鍵 "h" -- 交互界面 幫助手冊,按鍵 "q" 則 退出幫助,返回 交互界面 ## 按鍵 "q" -- 退出,返回命令行 ## 按鍵 "l" -- "first line" 顯示/關閉 開關 ## 按鍵 "M" -- "fourth line"、"fifth line" 顯示/關閉 開關
不少時候,咱們 只須要 查看 某一類 信息,不須要 查看 全部 信息,此時 咱們能夠 直接 經過 命令行 參數 來進行 操做
隊列
# top -h
## 進入 top 交互界面,某些 應用 不須要 每秒 更新信息,此時 top 能夠 設置 時間間隔 # top -d {time_sec}
## 默認 按 %CPU 這項 降序 排列,也能夠 指定 別的項 ## ## PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 任意某一項 # top -o {opt}
## 只顯示 指定用戶 的進程信息 # top -u {user_name}
# top -i