top 工具

top 是一個在類 Unix 系統(包括 macOS 和 Linux)中常用的工具,用於即時監控系統的行程(processes)和資源使用情況。

Processes,行程和執行緒總覽

Processes: 491 total, 5 running, 486 sleeping, 3862 threads

  • Processes: 491 total: 系統中總共有 491 個行程。
  • 5 running: 有 5 個行程目前正在執行中。
  • 486 sleeping: 有 486 個行程目前處於睡眠狀態(等待某些事件發生)。
  • 3862 threads: 系統中總共有 3862 個執行緒。執行緒是行程內部的執行單元,一個行程可以有多個執行緒。

Load Average ,系統負載和 CPU 使用率

Load average 值是一個綜合性的指標,受到多種因素的影響。透過分析負載平均值的變化,系統管理員可以更好地了解系統的運行狀態,並及時採取適當的措施以維持穩定的性能。Linux 中的 load average 被描述為三個不同的十進制值。以下面的例子可以看到 load averages: 1.26 1.35 1.36,由左至右分別為 1 分鐘、5 分鐘、10分鐘的平均負載狀況如下解釋:

  • 1 分鐘平均負載: 這表示過去 1 分鐘內正在運行或等待執行的平均進程數。
  • 5分鐘平均負載: 這表示過去 5 分鐘內正在運行或等待執行的平均進程數。
  • 15 分鐘平均負載: 這表示過去 15 分鐘內正在運行或等待執行的平均進程數。

下面有幾種狀況的解釋:

  • 如果平均值為 0.0,表示系統處於空閒狀態
  • 如果1min 平均值高於 5min 或 15min 平均值,則負載正在增加
  • 如果1min 平均值低於 5min 或 15min 平均值,則負載正在減少
  • 如果它們高於系統 CPU 的數量,那麼系統很可能會遇到效能問題(視情況而定)
1➜ uptime
2 9:14  up 4 days, 14:31, 1 user, load averages: 1.26 1.35 1.36

Load average 的變化受到多種因素的影響,它主要反映了系統的活動水平和性能狀態。以下是一些可能影響負載平均值變化的因素:

  1. CPU 使用率: 系統中運行的進程需要使用 CPU 資源。如果 CPU 使用率較高,系統的負載平均值可能會增加。這可能是由於執行大量計算密集型任務或多個進程競爭 CPU 資源。

  2. I/O 操作: 大量的 I/O 操作,例如磁盤讀寫、網絡輸入輸出等,可能導致系統的負載增加。這可能是由於多個進程在等待 I/O 完成,使得系統處於等待狀態。下面有解釋到為什麼 I/O 操作會影響 load avg

    「「平均負載」的目的是從人的角度得出一個與系統繁忙程度有關的數字。TASK_UNINTERRUPTIBLE 意味著進程正在等待諸如磁碟讀取之類的東西,這會增加系統負載。一個嚴重受磁碟限制的系統可能會非常緩慢,但TASK_RUNNING 平均值僅為0.1,這對任何人都沒有幫助。”

  3. 內存使用: 系統的內存使用情況也會影響 load avg。如果系統中的進程需要大量的內存,可能會導致系統的交換(swap)操作,進而增加 load avg。

  4. 進程數量: 系統中運行的進程數量會影響 load avg。當存在大量的活動進程,無論是運行中還是等待執行,都可能導致 load avg 值升高。

  5. 等待時間: 如果進程需要等待某些資源(例如鎖或同步),這可能導致系統的 load avg。這也包括在多核系統中,某些進程可能需要等待 CPU 核心的可用性。

  6. 系統的整體性能: 硬體性能、網絡帶寬、存儲速度等硬體因素都可能影響系統的整體性能,進而影響 load avg。

  7. 突發性事件: 例如突然的大量流量、系統故障、惡意攻擊等,都可能導致負載平均值的急劇增加。

CPU 的使用率分佈

CPU usage: 14.20% user, 4.66% sys, 81.13% idle SharedLibs: 448M resident, 109M data, 66M linkedit. MemRegions: 117 total, 3936K resident, 4208K private, 2377M shared.

  • CPU usage: 14.20% user, 4.66% sys, 81.13% idle
    • user: 14.20% 的 CPU 時間花費在執行使用者空間的行程(用戶啟動的應用程式等)。
    • sys: 4.66% 的 CPU 時間花費在執行核心空間的程式碼(系統呼叫、裝置驅動等)。
    • idle: 81.13% 的 CPU 時間處於空閒狀態。
    • 這表示機器的 CPU 大部分時間是空閒的,系統目前並未因為 CPU 瓶頸而變慢。
  • SharedLibs: 448M resident, 109M data, 66M linkedit: 共享函式庫的使用情況。resident 是實際佔用的記憶體,data 和 linkedit 是其中的數據和連結編輯部分。這部分對於一般使用者來說不是最關鍵的指標。

實體記憶體 (RAM) 使用情況

PhysMem: 15G used (3217M wired, 5955M compressor), 138M unused.

  • PhysMem: 15G used (3217M wired, 5955M compressor), 138M unused: 實體記憶體(RAM)的總體使用情況。
    • 15G used: 總共使用了 15 GB 的實體記憶體。
    • (3217M wired): 其中 3217 MB 是「有線記憶體」(wired memory),這部分記憶體不能被交換到硬碟上,通常由核心和關鍵系統服務使用。
    • (5955M compressor): 其中 5955 MB 是被壓縮的記憶體。macOS 會壓縮不常用的記憶體頁面,而不是直接交換到硬碟,以提高性能。
    • 138M unused: 還有 138 MB 的實體記憶體是完全未使用的。
    • 這顯示機器有 16GB 記憶體(15G used + 138M unused ≈ 15.138G)大部分正在被使用,但有相當一部分是被壓縮的。

虛擬記憶體 (VM) 使用情況

VM: 260T vsize, 5684M framework vsize, 22745372(0) swapins, 26777028(0) swapouts.

  • VM: 260T vsize, 5684M framework vsize, 22745372(0) swapins, 26777028(0) swapouts: 虛擬記憶體的使用情況。
    • 260T vsize: 總共的虛擬位址空間大小 (Virtual Size)。這是一個非常大的數字,表示系統可以定址的總記憶體範圍,並不代表實際佔用的硬碟空間。
    • 5684M framework vsize: 框架 (Framework) 佔用的虛擬位址空間。
    • 22745372(0) swapins: 從硬碟交換空間讀入記憶體的次數。括號裡的 0 表示最近沒有發生 swapin。
    • 26777028(0) swapouts: 從記憶體寫入硬碟交換空間的次數。括號裡的 0 表示最近沒有發生 swapout。
    • swapins 和 swapouts 的次數如果持續增加,表示系統正在頻繁地使用硬碟作為擴充記憶體,這通常會導致系統變慢。輸出顯示最近沒有發生交換活動 (括號裡是 0),這是一個好現象。

網路活動

Networks: packets: 120201633/129G in, 61599676/35G out.

  • Networks: packets: 120201633/129G in, 61599676/35G out: 網路流量統計,是系統啟動以來的累計數據。
    • 120201633/129G in: 總共接收了 120,201,633 個封包,總數據量為 129 GB。
    • 61599676/35G out: 總共發送了 61,599,676 個封包,總數據量為 35 GB。

硬碟活動

Disks: 1351063132/22T read, 56259681/1931G written.

  • Disks: 1351063132/22T read, 56259681/1931G written: 磁碟讀寫統計,是系統啟動以來的累計數據。
    • 1351063132/22T read: 總共讀取了 1,351,063,132 次操作,總數據量為 22 TB。
    • 56259681/1931G written: 總共寫入了 56,259,681 次操作,總數據量為 1931 GB (約 1.93 TB)。
comments powered by Disqus