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

前言

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

什麼是top命令

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

top命令使用

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

  2. 查看進程信息: 默認情況下,Top 命令會顯示系統中所有正在運行的進程,以及它們的 CPU 使用率、內存使用率等信息。你可以通過按下鍵盤上的 1 鍵來查看每個 CPU 核心的使用情況。

  3. 排序進程: Top 命令默認按照 CPU 使用率進行排序。你可以按下 P 鍵按照 CPU 使用率排序,按下M鍵按照內存使用率排序,按下 T 鍵按照運行時間排序等。

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

  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 壓力測試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章