top


整理 Linux 效能工具 top 的一些資訊,範例是在 ubuntu 16.04, AWS EC2 c5.large 上的資訊。


top

  • 上半部
  • 下半部
  • 控制指令

上半部

1
2
3
4
5
top - 12:46:35 up 6 days,  2:54,  1 user,  load average: 0.03, 0.01, 0.00
Tasks: 112 total, 1 running, 69 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3794276 total, 375408 free, 1904048 used, 1514820 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1600528 avail Mem

第一行資訊:

  1. 12:45:14: 系統目前的時間
  2. up 6 days, 2:52: 已經開機多久
  3. user: 目前系統有多少使用者登入
  4. load average: 系統負載狀況,分成每分鐘、每五分鐘、每十五分鐘

第二行:描述 Task 的狀態

  1. 112 個 Task
  2. 1 個在 running
  3. 69 個在 sleeping
  4. 0 個 stopped
  5. 0 個 zombie

第三行:描述 CPU 使用狀況

  • 0.2 us: user CPU time, User Space CPU 使用佔比
  • 0.0 sy: system CPU time, Kernel Space CPU 使用佔比
  • 0.0 ni: nice CPU time
  • 99.8 id: idle
  • 0.0 wa: iowait
  • 0.0 hi: Hardware IRQ, 硬體中斷 CPU 使用佔比
  • 0.0 si: Software Interrupts CPU 使用佔比
  • 0.0 st: steal time

檢查 CPU 工具:

  1. apt-get install sysstat
  2. mpstat
  3. mpstat -P ALL
1
2
3
4
5
6
7
~$ mpstat -P ALL
Linux 4.15.0-1045-aws (ip-10-2-9-114) 09/09/19 _x86_64_ (2 CPU)

13:41:11 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
13:41:11 all 0.26 0.00 0.09 0.06 0.00 0.04 0.00 0.00 0.00 99.54
13:41:11 0 0.26 0.00 0.09 0.10 0.00 0.04 0.00 0.00 0.00 99.51
13:41:11 1 0.26 0.00 0.09 0.03 0.00 0.04 0.00 0.00 0.00 99.58

第四行:描述記憶體狀況

  • KiB Mem: 單位是 KiB
  • 3794276 total: 實體記憶體大小
  • 375408 free: 剩餘的記憶體大小
  • 1904048 used: 使用記憶體大小
  • 1514820 buff/cache: 緩衝、快取區大小

第五行:描述 SWAP (暫存記憶體) 狀況

  • KiB Swap:
  • 0 total: SWAP 總量
  • 0 free: SWAP 剩下的量
  • 0 used: SWAP 使用的量
  • 1600528 avail Mem: 可用的記憶體大小

下半部

下半部顯示的是 process 的狀態

1
2
3
4
5
6
7
8
9
10
11
12
13
 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
4076 200 20 0 4168712 1.638g 25108 S 0.3 45.3 58:04.16 java
1 root 20 0 225240 9192 6908 S 0.0 0.2 0:05.62 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
7 root 20 0 0 0 0 S 0.0 0.0 0:05.56 ksoftirqd/0
8 root 20 0 0 0 0 I 0.0 0.0 0:10.57 rcu_sched
9 root 20 0 0 0 0 I 0.0 0.0 0:00.00 rcu_bh
10 root rt 0 0 0 0 S 0.0 0.0 0:00.01 migration/0
11 root rt 0 0 0 0 S 0.0 0.0 0:00.44 watchdog/0
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1

欄位的說明:

  • PID: ProcessID
  • USER: 使用者
  • PR: Process 優先序
  • NI: Nice 值,越小優先序越高
  • VIRT: virtual memory usage 虛擬記憶體使用,單位 KB
    • VIRT = SWAP + RES
  • RES: resident memory usage,該程序使用的、未被使用的記憶體大小。
    • RES = CODE + DATA
  • SHR: Share Memory 共享記憶體大小
  • S: 程序狀態
    • D: 不可中斷的睡眠狀態
    • R: 執行中
    • S: 睡眠中
    • T: 跟蹤/停止
    • Z: Zombie 程序
  • %CPU: 上次更新到現在的 CPU 佔比
  • %MEM: 程序使用的記憶體百分比
  • TIME+: 程序使用的 CPU 時間總計,單位為 1/100 s
  • COMMAND: 程序名稱

控制指令

底下是在 top 畫面時,可以使用的參數。

  • Global
    • s, d: 調整更新頻率
    • A: 同時顯示 動態、PID、Mem、CPU
    • H: Thread Mode, Default: off
    • 1: 一個或多個 CPU 顯示切換
    • z: 顏色
    • Z: 設定顏色
    • u: 指定要觀察的 使用者
    • h, ?: help
    • q: 離開 top
  • cli 參數: 輸出報表使用
    • b: batch
  • 控制上半部
    • l: 開或關上半部的第一行訊息
    • t: 依據切換以下訊息:
      • 開或關閉上半部的 Task 資訊
      • 切換第三行 CPU 的顯示方式,像是 Progress Bar
    • m: 關閉或者開啟第四行 Mem 和 第五行 Swap 的資訊
    • E: 切換單位
  • 控制下半部
    • f: 控制顯示的欄位
    • N: 用 PID 數字,由大到小排序
    • P: 用 CPU 使用率,由大到小排序
    • M: 以記憶體大小,由大到小排序
    • n: 設定顯示 Process 的數量
    • R: 排序
    • T: 用時間累積排序
    • 上下: 捲動畫面

常用情境

  • 找出前十個最消耗記憶體的程序

top -b -o +%MEM | head -n 17

  • 找出前十個最消耗 CPU 的程序

top -b -o +%CPU | head -n 17

  • 觀察 PID=1234,每 1 秒更新一次

top -b -d 1 -p 1234

  • 觀察使用 ubuntu,每 2 秒更新一次

top -d 2 -u ubuntu

相關工具

  • Process: ps, pstree
  • I/O: lsof, lsblk
  • CPU: lscpu, iostat, sar, mpstat
  • lsmem
  • lshw

類似工具

底下是同樣功能,用不同語言實作的。

  • htop
  • vtop: wirtten in Node.js
  • gtop: wirtten in Node.js
  • gotop: written in Go!
    • brew install gotop
    • snap install gotop-cjbassi
  • ptop: written in python
  • hegemon: written in Rust

延伸閱讀

站內資料

參考資料


Comments