Top命令你最少要瞭解到這個程度

来源:https://www.cnblogs.com/54chensongxia/archive/2020/03/18/12518705.html
-Advertisement-
Play Games

命令幾乎是每個程式員都會用到的Linux命令。這個命令用來查看Linux系統的綜合性能,比如CPU使用情況,記憶體使用情況。這個命令能幫助我快速定位程式的性能問題。 雖然這個命令很重要,但是之前對於這個命令的使用幾乎僅限於查看下哪個進程使用的CPU最高,哪個進程占用的記憶體最高。對於輸出的各個參數的含義 ...


top命令幾乎是每個程式員都會用到的Linux命令。這個命令用來查看Linux系統的綜合性能,比如CPU使用情況,記憶體使用情況。這個命令能幫助我快速定位程式的性能問題。

雖然這個命令很重要,但是之前對於這個命令的使用幾乎僅限於查看下哪個進程使用的CPU最高,哪個進程占用的記憶體最高。對於輸出的各個參數的含義也是一知半解,更不用說top的一些高級用法了。

本篇博客就來具體分析下top的詳細使用方法。

top輸出參數的含義

在Linux終端輸入top,一般會有如下輸出。

top - 15:34:12 up 127 days, 10:23,  2 users,  load average: 0.04, 0.03, 0.00
Tasks: 291 total,   1 running, 290 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 98.3%id,  1.3%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1792312k total,   288300k used,  1504012k free,    10384k buffers
Swap:  6291452k total,     5380k used,  6286072k free,    14128k cached

PID    USER  PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
372007 root  20   0 15160 1336  888 R  0.3  0.1   0:00.33 top                                   
     1 root  20   0 19356  236   88 S  0.0  0.0   0:16.06 init 

... 下麵省略...

下麵就對這些輸出信息做下詳細的說明

系統運行時間和平均負載

top輸出的第一行表示系統的運行時間和平均負載

top - 15:34:12 up 127 days, 10:23,  2 users,  load average: 0.04, 0.03, 0.00
  • 15:34:12: 表示系統的當前時間是下午15點34分12秒;

  • up 127 days, 10:23:表示這個Linux系統已經啟動127天多;

  • 2 users:表示當前有兩個用戶登陸系統,可以用who命令查看具體是誰登陸了;

  • load average: 0.04, 0.03, 0.00:最近1、5和15分鐘內的平均負載

1. load average的含義

這裡我們對這個laod average指標做下詳細說明。

laod average這個指標的含義:在特定時間間隔內運行隊列中(在CPU上運行或者等待運行多少進程)的平均進
程數(狀態是Runnable和running的線程個數的和)。

上面這個解釋可能還是比較難理解。我們拿個實際的列子說明下。比如現在top命令有以下輸出:

load average: 20.14, 22.03, 15.00

20.14 表示從當前時間到過去的一分鐘內大概有 20.14個進程(線程)在等待CPU資源

22.03 表示從當前時間到過去的五分鐘內大概有 22.03個進程(線程)在等待CPU資源

15.00 表示從當前時間到過去的十五分鐘內大概有 15.00個進程(線程)在等待CPU資源

為了更好地理解這個負載的含義,下麵列了一個交通流量的列子。

單核CPU可以想象成單車道

比如每個圓圈都是小汽車,第一種是滿負荷但CPU時間片不用排隊等待正好夠用,第二種是%50空閑,第三個是超負荷50%,後面的就有隊列等待了。

單核CPU,負載數值在0.00-1.00之間正常。

  • 0.00-1.00之間的數字表示此時路況非常良好,沒有擁堵,車輛可以毫無阻礙地通過。
  • 1.00表示道路還算正常,但有可能會惡化並造成擁堵。此時系統已經沒有多餘的資源了,管理員需要進行優化。
  • 1.00以上表示路況不太好了,如果到達2.00表示有橋上車輛一倍數目的車輛正在等待。這種情況你必須進行檢查了。

多核CPU可以想象成多車道

多核CPU的話,負載數值/CPU核數 在0.00-1.00之間表示正常。

現實生產中,不會讓負載數值/CPU核數任意接近1的。一般當這個值達到0.8或者0.9時就需要分析分析原因了。當然這個也沒有具體的定論,都是一家之言。

2. load average和CPU利用率的區別(這兩個概念很重要,希望大家仔細看看)

先直接引用下這篇文章中的截圖

上面的列子對CPU使用個CPU做了比較好的解釋,我自己也想了個列子,可能更加形象貼切。

其實,可以將CPU比喻成公司的廁所。比如說你所在的樓層有一個衛生間。每個衛生間有4個坑位(4核CPU)。一般早上的時候資源會比較緊張,在某個時間點,你做了一個統計,你發現在過去的1分鐘,5分鐘和15分鐘內分別有6個人,8個人,8個人正在”使用“廁所(這裡的人數包括等待上廁所和正在上廁所的人數),那兒此時公司廁所的負載就是6.00,8.00和8.00。通過上面的介紹我們發現此時公司廁所是過載的。(這個就是CPU負載的概念)

那麼CPU使用又是什麼意思呢?

還是以剛剛的廁所為列子。以現在的時間點到過去的15分鐘內,你發現有3個同事用了其中一個坑位。時候你採訪了下這個三個同事:在他們使用廁所的過程中多長時間是真的在上廁所?採訪結果是:第一個同事2分鐘上測試+3分鐘玩手機,第二個同事1分鐘上廁所+3分鐘胡思亂想,第三個同事3分鐘上廁所+3分鐘玩手機。

那麼這段時間內這個坑位的利用率就是(2+1+3)/15 = 40%

3. CPU負載和CPU使用率對我們的知道意義

  • 高CPU負載 低CPU使用率:可能系統中較多的文件IO和網路IO操作。
  • 高CPU負載 高CPU使用率:CPU資源不足
  • 低CPU負載 低CPU使用率:系統CPU資源良好,道路非常順暢;
  • 低CPU負載 高CPU使用率:這種情況一般都是程式的問題,比如程式中代碼進入死迴圈,有很多自旋操作等。CPU使用率一直過高對CPU傷害比較大。

上面只是列了一些比較常見的情況,具體問題還得具體分析。

任務信息

Tasks: 291 total,   1 running, 290 sleeping,   0 stopped,   0 zombie

Tasks — 任務(進程),系統現在共有 291 個進程,其中處於運行中的有1個,290個在休眠(sleep),stoped狀態的有0個,zombie狀態(僵屍)的有0個。

按 t 可以關閉顯示這個任務信息,再按下 t 可以開啟這個任務信息

CPU狀態

Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 98.3%id,  1.3%wa,  0.0%hi,  0.0%si,  0.0%st
  • us 列顯示了用戶模式下所花費 CPU 時間的百分比。us的值比較高時,說明用戶進程消耗的 CPU 時間多,但是如果長期大於50%,需要考慮優化用戶的程式。
  • sy 列顯示了內核進程所花費的 CPU 時間的百分比。這裡us + sy的參考值為80%,如果us+sy 大於 80%說明可能存在CPU不足。
  • ni 列顯示了用戶進程空間內改變過優先順序的進程占用CPU百分比。
  • id 列顯示了 CPU 處在空閑狀態的時間百分比。
  • wa 列顯示了IO等待所占用的CPU時間的百分比。這裡 wa 的參考值為30%,如果wa超過30%,說明IO等待嚴重,這可能是磁碟大量隨機訪問造成的,也可能磁碟或者磁碟訪問控制器的帶寬瓶頸造成的(主要是塊操作)。 這個wa和vmstat中的wa是相同含義。
  • hi 硬體中斷占用CPU
  • si 軟體中斷占用CPU
  • st 丟失時間占用CPU

在後臺開發中需要關註us,sy,id,wa等常用指標

按數字 1,可以查看CPU的核數和每個CPU的使用情況。

記憶體使用情況

Mem:   1792312k total,   288300k used,  1504012k free,    10384k buffers
Swap:  6291452k total,     5380k used,  6286072k free,    14128k cached

關於這些值表示的具體含義,我在我的博客Linux 記憶體分析工具——free命令中詳細分析過,大家可以參考。

進程的狀態監控

PID    USER  PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
372007 root  20   0 15160 1336  888 R  0.3  0.1   0:00.33 top                                   
     1 root  20   0 19356  236   88 S  0.0  0.0   0:16.06 init 
  • PID:進程ID,進程的唯一標識符
  • USER:進程所有者的實際用戶名。
  • PR:進程的調度優先順序。這個欄位的一些值是'rt'。這意味這這些進程運行在實時態。
  • NI:進程的nice值(優先順序)。越小的值意味著越高的優先順序。負值表示高優先順序,正值表示低優先順序
  • VIRT:進程使用的虛擬記憶體。進程使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES
  • RES:駐留記憶體大小。駐留記憶體是任務使用的非交換物理記憶體大小。進程使用的、未被換出的物理記憶體大小,單位kb。RES=CODE+DATA
  • SHR:SHR是進程使用的共用記憶體。共用記憶體大小,單位kb
  • S:這個是進程的狀態。它有以下不同的值:
    • D - 不可中斷的睡眠態。
    • R – 運行態
    • S – 睡眠態
    • T – 被跟蹤或已停止
    • Z – 僵屍態
  • %CPU:自從上一次更新時到現在任務所使用的CPU時間百分比。
  • %MEM:進程使用的可用物理記憶體百分比。
  • TIME+:任務啟動後到現在所使用的全部CPU時間,精確到百分之一秒。
  • COMMAND:運行進程所使用的命令。進程名稱(命令名/命令行)

還有許多在預設情況下不會顯示的輸出,它們可以顯示進程的頁錯誤、有效組和組ID和其他更多的信息。

按下 f 鍵盤可以調出更多顯示選項。按esc鍵返回top顯示頁。

top的一些命令行參數

  • -b:批處理模式(batch mode),可輸出到管道、文件。預設情況下-b會一直輸出,可以用-nN指定輸出次數。
  • -n N:限制輸出次數。
  • -d N:刷新時間間隔。
  • -p PID:監控指定進程。
  • -Hp PID:監控指定進程和進行內線程信息。(比較常用

top一些交互鍵的說明

進入top頁面後,我們可以進行一些交互操作。下麵是一些交互鍵的說明:

  • c 顯示完整的命令名。c為Command之意。
  • d 修改刷新時間。d為Display之意。
  • u 顯示指定用戶相關進程。u為User之意
  • P 按CPU使用排序。P為Processor(處理器)之意。
  • M 按記憶體使用排序。M為Momery之意。
  • F 排序(進入新的界面,並選擇排序的目標欄位)
  • R 順序或逆序。
  • H 顯示線程
  • Z 以多色彩顯示top。

參考


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; n ...
  • 項目是ASP.NET MVC,在重構時頁面時,幾部頁面相同的html代碼,被抽至部分視圖Partial View中去了。但是ASP.NET MVC中,又使用了angularjs。所以部分視圖中的Controller相對於angularjs來說,就成了子控制器Controller。 現在的問題是,在視 ...
  • .NET 5 Preview 1 發佈 去年年底,我們發佈了.NET Core 3.0和3.1.這些版本添加了桌面應用程式模型Windows Forms(WinForms)和WPF,ASP.NET Blazor用於構建SPA應用程式和用於構建分散式應用和服務的gRPC模板、用於與gRPC對話豐富的客 ...
  • At the end of last year, we shipped .NET Core 3.0 and 3.1. These versions added the desktop app models Windows Forms (WinForms) and WPF, ASP.NET Blazo ...
  • 1. 死鎖問題出現 2. 死鎖的成因 3. 死鎖的4個必要條件 4. 死鎖處理方法 1. 死鎖預防 2. 死鎖避免 判斷這次請求是否會引起死鎖? 演算法實現 死鎖避免之銀行家演算法實例 請求出現時: 首先假裝分配,然後調用銀行家演算法 3. 死鎖檢測+恢復: 發現問題再處理 例題: 4. 死鎖忽略 ...
  • 8. gitlab相關介紹 8.1 gitlab優勢 社區版本,自己可以在公司搭建環境 維護人員多,版本更新塊 易用性強,上手快 集成CI(持續集成) 集成CD(持續發佈) 8.2 持續集成 8.2.1 持續集成的優勢 快速發現錯誤。每完成一點更新,就集成到主幹,可以快速發現錯誤,定位錯誤也比較容易 ...
  • 一、進程描述符 進程式控制制塊PCB:是OS控制進程運行用的數據結構,是一個task_struct結構體。 PCB包括:進程標識信息(進程標識符PID等)、執行現場信息(CPU現場,進程切換時需要保存現場信息)、進程映像信息(進程地址空間,即進程在運行時代碼、數據、棧放在什麼位置,方便OS對地址空間進行 ...
  • 最近使用了parallels desktop 安裝了win10,啟動後發現會導致mac無聲音。後來百度到重啟coreaudiod進程可解決(在活動監視器里直接結束該進程後會自動重啟) 參考鏈接:MAC技巧:兩個方法,輕鬆解決蘋果電腦沒聲音! https://baijiahao.baidu.com/s ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...