10分鐘帶你瞭解 Linux 系統中的 Top 命令

霍格沃兹测试开发学社發表於2024-04-02

前言

作為一個測試工程師,可能我們並不需要像運維人員那樣時時刻刻去關注系統的執行情況,但是對於一些檢視系統執行情況,以及效能情況的命令,我們還是需要了解並掌握的,本文就來給大家介紹一下Linux系統重非常重要的top命令。

什麼是top命令

在 Linux 系統中,top 命令是一個非常實用的工具,用於動態監視系統的資源使用情況。它提供了一個互動式介面,展示了各種程序的 CPU、記憶體、以及其他資源的使用情況,以及系統的整體負載情況。

top命令使用

  1. 啟動 Top 命令: 在終端中輸入 top 並按下Enter鍵即可啟動 Top 命令。

  2. 檢視程序資訊: 預設情況下,Top 命令會顯示系統中所有正在執行的程序,以及它們的 CPU 使用率、記憶體使用率等資訊。你可以透過按下鍵盤上的 1 鍵來檢視每個 CPU 核心的使用情況。

  3. 排序程序: Top 命令預設按照 CPU 使用率進行排序。你可以按下 P 鍵按照 CPU 使用率排序,按下M鍵按照記憶體使用率排序,按下 T 鍵按照執行時間排序等。

  4. 結束程序: 如果你需要結束某個程序,可以按下k鍵,然後輸入要結束的程序的 PID(程序 ID)並按下Enter鍵。

  5. 改變重新整理頻率: 預設情況下,Top 每隔 3 秒重新整理一次資訊。你可以按下 d 鍵來改變重新整理頻率,然後輸入你希望的重新整理時間間隔(單位是秒)。

  6. 退出 Top: 按下 q 鍵即可退出 Top 命令。

top命令輸出解析

我們執行top命令後,會出現如下結果:

top
top - 14:07:53 up 256 days,  3:35,  1 user,  load average: 0.07, 0.03, 0.00
Tasks: 162 total,   1 running, 161 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.1 sy,  0.0 ni, 99.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  15495.8 total,   7684.9 free,    648.9 used,   7162.0 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.  14505.7 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
3225815 root      20   0 1211152 242716  31368 S   1.0   1.5   1216:30 YDService
3919907 root      20   0  636660  23796   5728 S   0.7   0.1  66:34.30 barad_agent
    895 root      20   0  235592   7400   6568 S   0.3   0.0  15:42.06 accounts-daemon
  25575 root      20   0 1749324  11644   8288 S   0.3   0.1  89:04.43 YDLive
 661118 root      20   0       0      0      0 I   0.3   0.0   0:05.52 kworker/2:0-events
1981516 root      20   0       0      0      0 I   0.3   0.0   0:00.03 kworker/u16:2-events_power_efficient
1981889 ubuntu    20   0    9276   3936   3260 R   0.3   0.0   0:00.21 top
      1 root      20   0  168684  12744   8376 S   0.0   0.1  13:27.41 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:09.82 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-kblockd
      8 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq
      9 root      20   0       0      0      0 S   0.0   0.0   0:30.34 ksoftirqd/0
     10 root      20   0       0      0      0 I   0.0   0.0  56:03.90 rcu_sched

top命令輸出了很多引數,真正的伺服器負載情況我們要綜合其他引數一起看,執行結果可以分為兩部分:

第一部分是前5行,是系統整體的統計資訊;

第二部分是第8行開始的程序資訊,我們從上往下逐行依次進行說明。

系統整體的統計資訊

第一行:

top - 14:07:53 up 256 days,  3:35,  1 user,  load average: 0.07, 0.03, 0.00
  • top:當前時間
  • up:機器執行了多長時間
  • users:當前登入使用者數
  • load average:系統負載,即任務佇列的平均長度。三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。

第二行:

Tasks: 162 total,   1 running, 161 sleeping,   0 stopped,   0 zombie
  • Tasks:當前有多少程序
  • running:正在執行的程序數
  • sleeping:正在休眠的程序數
  • stopped:停止的程序數
  • zombie:殭屍程序數

當前正在執行的程序越對,系統壓力就會越大。

第三行:

%Cpu(s):  0.2 us,  0.1 sy,  0.0 ni, 99.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
  • us:使用者空間佔CPU的百分比(像shell程式、各種語言的編譯器、各種應用、web伺服器和各種桌面應用都算是執行在使用者地址空間的程序,這些程式如果不是處於idle狀態,那麼絕大多數的CPU時間都是執行在使用者態)
  • sy: 核心空間佔CPU的百分比(所有程序要使用的系統資源都是由Linux核心處理的,對於作業系統的設計來說,消耗在核心態的時間應該是越少越好,在實踐中有一類典型的情況會使sy變大,那就是大量的IO操作,因此在調查IO相關的問題時需要著重關注它)
  • ni:使用者程序空間改變過優先順序(ni是nice的縮寫,可以透過nice值調整程序使用者態的優先順序,這裡顯示的ni表示調整過nice值的程序消耗掉的CPU時間,如果系統中沒有程序被調整過nice值,那麼ni就顯示為0)
  • id: 空閒CPU佔用率
  • wa: 等待輸入輸出的CPU時間百分比(和CPU的處理速度相比,磁碟IO操作是非常慢的,有很多這樣的操作,比如,CPU在啟動一個磁碟讀寫操作後,需要等待磁碟讀寫操作的結果。在磁碟讀寫操作完成前,CPU只能處於空閒狀態。Linux系統在計算系統平均負載時會把CPU等待IO操作的時間也計算進去,所以在我們看到系統平均負載過高時,可以透過wa來判斷系統的效能瓶頸是不是過多的IO操作造成的)
  • hi: 硬中斷佔用百分比(硬中斷是硬碟、網路卡等硬體裝置傳送給CPU的中斷訊息,當CPU收到中斷訊息後需要進行適當的處理(消耗CPU時間)。)
  • si:軟中斷佔用百分比(軟中斷是由程式發出的中斷,最終也會執行相應的處理程式,消耗CPU時間)
  • st:steal time

第四行:

MiB Mem :  15495.8 total,   7684.9 free,    648.9 used,   7162.0 buff/cache
  • total:實體記憶體總量
  • free:空閒記憶體量
  • used:使用的記憶體量
  • buffer/cache:用作核心快取的記憶體量

第五行:

MiB Swap:      0.0 total,      0.0 free,      0.0 used.  14505.7 avail Mem
  • total:交換區記憶體總量
  • free:空閒交換區總量
  • used:使用的交換區總量
  • buffer/cache:緩衝的交換區總量

第四第五行分別是記憶體資訊和swap資訊,所有程式的執行都是在記憶體中進行的,所以記憶體的效能對與伺服器來說非常重要。不過當記憶體的free變少的時候,其實我們並不需要太緊張。真正需要看的是Swap中的used資訊。Swap分割槽是由硬碟提供的交換區,當實體記憶體不夠用的時候,作業系統才會把暫時不用的資料放到Swap中。

程序資訊

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
3225815 root      20   0 1211152 242716  31368 S   1.0   1.5   1216:30 YDService
3919907 root      20   0  636660  23796   5728 S   0.7   0.1  66:34.30 barad_agent
    895 root      20   0  235592   7400   6568 S   0.3   0.0  15:42.06 accounts-daemon
  25575 root      20   0 1749324  11644   8288 S   0.3   0.1  89:04.43 YDLive
PID  	程序id
USER	程序所有者的使用者名稱
PR	   	優先順序
NI		nice值,負值表示高優先順序,正值表示低優先順序
VIRT	程序使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES
RES		程序使用的、未被換出的實體記憶體大小,單位kb。RES=CODE+DATA
SHR		共享記憶體大小,單位kb
S		程序狀態。D=不可中斷的睡眠狀態 R=執行 S=睡眠 T=跟蹤/停止 Z=殭屍程序
%CPU	上次更新到現在的CPU時間佔用百分比
%MEM	程序使用的實體記憶體百分比
TIME+	程序使用的CPU時間總計,單位1/100秒
COMMAND	命令名/命令列

top命令使用

top命令的格式為:

top [選項]

常用引數:

  • -d:指定每兩次螢幕資訊重新整理之間的時間間隔,如希望每秒重新整理一次,則使用:top -d 1
  • -p: 透過指定PID來僅僅監控某個程序的狀態
  • -S: 指定累計模式
  • -s: 使top命令在安全模式中執行。這將去除互動命令所帶來的潛在危險
  • -i: 使top不顯示任何閒置或者僵死的程序
  • -c: 顯示整個命令列而不只是顯示命令名

總結

Top 命令是 Linux 系統中一個非常強大的工具,它可以幫助你實時監視系統的資源使用情況,識別和解決系統效能問題。透過本文介紹的基本使用方法,你可以更好地利用 Top 命令來管理你的 Linux 系統。

推薦學習

【霍格沃茲測試開發】7 天軟體測試快速入門 帶你從零基礎/ 轉行/ 小白/ 就業/ 測試用例設計實戰

【霍格沃茲測試開發】最新版!Web 自動化測試從入門到精通/ 電子商務產品實戰/Selenium (上集)

【霍格沃茲測試開發】最新版!Web 自動化測試從入門到精通/ 電子商務產品實戰/Selenium (下集)

【霍格沃茲測試開發】明星講師精心打造最新Python 教程軟體測試開發從業者必學(上集)

【霍格沃茲測試開發】明星講師精心打造最新Python 教程軟體測試開發從業者必學(下集)

【霍格沃茲測試開發】精品課合集/ 自動化測試/ 效能測試/ 精準測試/ 測試左移/ 測試右移/ 人工智慧測試

【霍格沃茲測試開發】騰訊/ 百度/ 阿里/ 位元組測試專家技術沙龍分享合集/ 精準化測試/ 流量回放/Diff

【霍格沃茲測試開發】Pytest 用例結構/ 編寫規範 / 免費分享

【霍格沃茲測試開發】JMeter 實時效能監控平臺/ 資料分析展示系統Grafana/Docker 安裝

【霍格沃茲測試開發】介面自動化測試的場景有哪些?為什麼要做介面自動化測試?如何一鍵生成測試報告?

【霍格沃茲測試開發】面試技巧指導/ 測試開發能力評級/1V1 模擬面試實戰/ 衝刺年薪百萬!

【霍格沃茲測試開發】騰訊軟體測試能力評級標準/ 要評級表格的聯絡我

【霍格沃茲測試開發】Pytest 與Allure2 一鍵生成測試報告/ 測試用例斷言/ 資料驅動/ 引數化

【霍格沃茲測試開發】App 功能測試實戰快速入門/adb 常用命令/adb 壓力測試

相關文章