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 的變化受到多種因素的影響,它主要反映了系統的活動水平和性能狀態。以下是一些可能影響負載平均值變化的因素:
CPU 使用率: 系統中運行的進程需要使用 CPU 資源。如果 CPU 使用率較高,系統的負載平均值可能會增加。這可能是由於執行大量計算密集型任務或多個進程競爭 CPU 資源。
I/O 操作: 大量的 I/O 操作,例如磁盤讀寫、網絡輸入輸出等,可能導致系統的負載增加。這可能是由於多個進程在等待 I/O 完成,使得系統處於等待狀態。下面有解釋到為什麼 I/O 操作會影響 load avg
「「平均負載」的目的是從人的角度得出一個與系統繁忙程度有關的數字。TASK_UNINTERRUPTIBLE 意味著進程正在等待諸如磁碟讀取之類的東西,這會增加系統負載。一個嚴重受磁碟限制的系統可能會非常緩慢,但TASK_RUNNING 平均值僅為0.1,這對任何人都沒有幫助。”
內存使用: 系統的內存使用情況也會影響 load avg。如果系統中的進程需要大量的內存,可能會導致系統的交換(swap)操作,進而增加 load avg。
進程數量: 系統中運行的進程數量會影響 load avg。當存在大量的活動進程,無論是運行中還是等待執行,都可能導致 load avg 值升高。
等待時間: 如果進程需要等待某些資源(例如鎖或同步),這可能導致系統的 load avg。這也包括在多核系統中,某些進程可能需要等待 CPU 核心的可用性。
系統的整體性能: 硬體性能、網絡帶寬、存儲速度等硬體因素都可能影響系統的整體性能,進而影響 load avg。
突發性事件: 例如突然的大量流量、系統故障、惡意攻擊等,都可能導致負載平均值的急劇增加。
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)。