Linux中常用的監(jiān)控命令

Linux中常用的監(jiān)控命令

在以前使用windows系統(tǒng)的時(shí)候,常常會遇到系統(tǒng)變卡,然后我們就會使用快捷鍵 ctrl+shift+ESC 來調(diào)出windows的任務(wù)管理器,我們可以看到當(dāng)前運(yùn)行的進(jìn)程,進(jìn)程所占的CPU資源,內(nèi)存資源等,還可以直接強(qiáng)制結(jié)束掉進(jìn)程。

我們在使用linux的時(shí)候也同樣會出現(xiàn)這樣的問題,如果你遇到了,那么你就要學(xué)會這些linux查看系統(tǒng)資源的命令。

[toc]

下面我分為這么幾個(gè)角度分別說下這些命令的使用:

  1. 整機(jī)
  2. CPU
  3. 內(nèi)存
  4. 硬盤
  5. 磁盤
  6. 網(wǎng)絡(luò)I/O

整機(jī)

top 命令

參數(shù)說明:

  • d:指定每兩次屏幕信息刷新之間的時(shí)間間隔。當(dāng)然用戶可以使用s交互命令來改變之。
  • p:通過指定監(jiān)控進(jìn)程ID來僅僅監(jiān)控某個(gè)進(jìn)程的狀態(tài)。
  • q:該選項(xiàng)將使top沒有任何延遲的進(jìn)行刷新。如果調(diào)用程序有超級用戶權(quán)限,那么top將以盡可能高的優(yōu)先級運(yùn)行。
  • S:指定累計(jì)模式。
  • s:使top命令在安全模式中運(yùn)行。這將去除交互命令所帶來的潛在危險(xiǎn)。
  • i:使top不顯示任何閑置或者僵死進(jìn)程。
  • c:顯示整個(gè)命令行而不只是顯示命令名。

常用命令說明:

  • Ctrl+L:擦除并且重寫屏幕
  • K:終止一個(gè)進(jìn)程。系統(tǒng)將提示用戶輸入需要終止的進(jìn)程PID,以及需要發(fā)送給該進(jìn)程什么樣的信號。一般的終止進(jìn)程可以使用15信號;如果不能正常結(jié)束那就使用信號9強(qiáng)制結(jié)束該進(jìn)程。默認(rèn)值是信號15。在安全模式中此命令被屏蔽。
  • i:忽略閑置和僵死進(jìn)程。這是一個(gè)開關(guān)式命令。
  • q:退出程序
  • r:重新安排一個(gè)進(jìn)程的優(yōu)先級別。系統(tǒng)提示用戶輸入需要改變的進(jìn)程PID以及需要設(shè)置的進(jìn)程優(yōu)先級值。輸入一個(gè)正值將使優(yōu)先級降低,反之則可以使該進(jìn)程擁有更高的優(yōu)先權(quán)。默認(rèn)值是10。
  • S:切換到累計(jì)模式。
  • s:改變兩次刷新之間的延遲時(shí)間。系統(tǒng)將提示用戶輸入新的時(shí)間,單位為s。如果有小數(shù),就換算成m s。輸入0值則系統(tǒng)將不斷刷新,默認(rèn)值是5 s。需要注意的是如果設(shè)置太小的時(shí)間,很可能會引起不斷刷新,從而根本來不及看清顯示的情況,而且系統(tǒng)負(fù)載也會大大增加。
  • f或者F:從當(dāng)前顯示中添加或者刪除項(xiàng)目。
  • o或者O:改變顯示項(xiàng)目的順序
  • l:切換顯示平均負(fù)載和啟動時(shí)間信息。
  • m:切換顯示內(nèi)存信息。
  • t:切換顯示進(jìn)程和CPU狀態(tài)信息。
  • c:切換顯示命令名稱和完整命令行。
  • M:根據(jù)駐留內(nèi)存大小進(jìn)行排序。
  • P:根據(jù)CPU使用百分比大小進(jìn)行排序。
  • T:根據(jù)時(shí)間/累計(jì)時(shí)間進(jìn)行排序。
  • W:將當(dāng)前設(shè)置寫入~/.toprc文件中。

當(dāng)我們輸入top命令后我們可以看到:

其中有一行是白色的,白色中顯示的是字段名稱:
PID: 進(jìn)程id號
PPID:父進(jìn)程id號
UID:有效用戶id號
USER:有效用戶名
RUSER: 真實(shí)用戶名
TTY:終端設(shè)備
%CPU:計(jì)算資源
%MEN:內(nèi)存
%TIME+:CPU時(shí)間

VIRT:virtual memory usage 虛擬內(nèi)存

  1. 進(jìn)程“需要的”虛擬內(nèi)存大小,包括進(jìn)程使用的庫、代碼、數(shù)據(jù)等
  2. 假如進(jìn)程申請100m的內(nèi)存,但實(shí)際只使用了10m,那么它會增長100m,而不是實(shí)際的使用量

RES:resident memory usage 常駐內(nèi)存

  1. 進(jìn)程當(dāng)前使用的內(nèi)存大小,但不包括swap out
  2. 包含其他進(jìn)程的共享
  3. 如果申請100m的內(nèi)存,實(shí)際使用10m,它只增長10m,與VIRT相反
  4. 關(guān)于庫占用內(nèi)存的情況,它只統(tǒng)計(jì)加載的庫文件所占內(nèi)存大小

SHR:shared memory 共享內(nèi)存

  1. 除了自身進(jìn)程的共享內(nèi)存,也包括其他進(jìn)程的共享內(nèi)存
  2. 雖然進(jìn)程只使用了幾個(gè)共享庫的函數(shù),但它包含了整個(gè)共享庫的大小
  3. 計(jì)算某個(gè)進(jìn)程所占的物理內(nèi)存大小公式:RES – SHR
  4. swap out后,它將會降下來

uptime 命令

簡化版top命令

從上面的參數(shù),top命令顯示的內(nèi)容,我們就可以看到很多的參數(shù),也是特別詳細(xì)的,但是我們可能有時(shí)候就只是想了解一些簡單的信息,這時(shí)候我們就可以使用uptime這個(gè)命令了。

root@VM-0-4-ubuntu:~# uptime
 15:17:22 up 171 days, 16:56,  1 user,  load average: 0.00, 0.02, 0.02
  • 系統(tǒng)當(dāng)前時(shí)間 15:17:22
  • 171 days, 16:56 從上次啟動開始系統(tǒng)運(yùn)行的時(shí)間
  • 1 user 注意這里實(shí)際是連接數(shù)量,可以自己測試出來,同一用戶多個(gè)連接的時(shí)候算多個(gè)
  • load average: 0.00, 0.02, 0.02 這是重頭戲,分別描述了1分鐘5分鐘15分鐘內(nèi)系統(tǒng)平均負(fù)載

參數(shù)

  • -p, --pretty show uptime in pretty format//以比較友好的格式輸出
  • -h, --help display this help text//顯示幫助選項(xiàng)
  • -s, --since system up since, in yyyy-mm-dd HH:MM:SS format//系統(tǒng)啟動時(shí)間
  • -V, --version display version information and exit//版本信息

CPU

vmstat 命令

vmstat命令可以查看很多信息,包括服務(wù)器的CPU使用率,內(nèi)存使用,虛擬內(nèi)存交換情況,IO讀寫情況。但是我們一般使用vmstat命令一般常用來查看cpu的情況。

參數(shù)

  • -a:顯示活躍和非活躍內(nèi)存

  • -f:顯示從系統(tǒng)啟動至今的fork數(shù)量 。

  • -m:顯示slabinfo

  • -n:只在開始時(shí)顯示一次各字段名稱。

  • -s:顯示內(nèi)存相關(guān)統(tǒng)計(jì)信息及多種系統(tǒng)活動數(shù)量。

  • delay:刷新時(shí)間間隔。如果不指定,只顯示一條結(jié)果。

  • count:刷新次數(shù)。如果不指定刷新次數(shù),但指定了刷新時(shí)間間隔,這時(shí)刷新次數(shù)為無窮。

  • -d:顯示磁盤相關(guān)統(tǒng)計(jì)信息。

  • -p:顯示指定磁盤分區(qū)統(tǒng)計(jì)信息

  • -S:使用指定單位顯示。參數(shù)有 k 、K 、m 、M ,分別代表1000、1024、1000000、1048576字節(jié)(byte)。默認(rèn)單位為K(1024 bytes)

  • -V:顯示vmstat版本信息。

每2秒采集一次每次采集
  • procs(進(jìn)程)
    • r:當(dāng)前運(yùn)行隊(duì)列中線程的數(shù)目,代表線程處于可運(yùn)行狀態(tài),但CPU還未能執(zhí)行.,這個(gè)值可以作為判斷CPU是否繁忙的一個(gè)指標(biāo);當(dāng)這個(gè)值超過了CPU數(shù)目,就會出現(xiàn)CPU瓶頸了;這個(gè)我們可以結(jié)合top命令的負(fù)載值同步評估系統(tǒng)性能;
    • b:等待IO的進(jìn)程數(shù)量;如果該值一直都很大,說明IO比較繁忙,處理較慢;
  • memory(內(nèi)存)
    • swpd:虛擬內(nèi)存已使用的大??;如果swpd的值不為0,但是si,so的值長期為0,這種情況不會影響系統(tǒng)性能;
    • free:空閑的物理內(nèi)存的大?。?/li>
    • buff:用作緩沖的內(nèi)存大??;
    • cache:用作緩存的內(nèi)存大??;如果cache的值大的時(shí)候,說明cache處的文件數(shù)多,如果頻繁訪問到的文件都能被cache處,那么磁盤的讀IO bi會非常小;
  • swap(交換空間,單位:KB);內(nèi)存夠用的時(shí)候,這2個(gè)值都是0,如果這2個(gè)值長期大于0時(shí),系統(tǒng)性能會受到影響,磁盤IO和CPU資源都會被消耗。有時(shí)我們看到空閑內(nèi)存(free)很少的或接近于0時(shí),就認(rèn)為內(nèi)存不夠用了,不能光看這一點(diǎn),還要結(jié)合si和so,如果free很少,但是si和so也很少(大多時(shí)候是0),那么不用擔(dān)心,系統(tǒng)性能這時(shí)不會受到影響的;
    • si:每秒從交換區(qū)寫到內(nèi)存的大?。?/li>
    • so:每秒寫入交換區(qū)的內(nèi)存大小;
  • io(單位:塊/秒)
    • bi:每秒讀取的塊數(shù);
    • bo:每秒寫入的塊數(shù);隨機(jī)磁盤讀寫的時(shí)候,這2個(gè)值越大,能看到CPU在IO等待的值也會越大;
  • system(系統(tǒng));這2個(gè)值越大,會看到由內(nèi)核消耗的CPU時(shí)間會越大;
    • in:每秒中斷數(shù),包括時(shí)鐘中斷;
    • cs:每秒上下文切換數(shù);
  • cpu(以百分比表示)
    • us:用戶進(jìn)程執(zhí)行時(shí)間(user time);
    • sy:系統(tǒng)進(jìn)程執(zhí)行時(shí)間(system time);如果 us+sy大于80%系統(tǒng)負(fù)擔(dān)就比較大了。
    • id:空閑時(shí)間(包括IO等待時(shí)間);
    • wa:等待IO時(shí)間;wa的值高時(shí),說明IO等待比較嚴(yán)重,這可能由于磁盤大量作隨機(jī)訪問造成,也有可能磁盤出現(xiàn)瓶頸。

mpstat 命令

查看所有cpu核的信息

常用 mpstat -P ALL 2 每兩秒采樣一次所有cpu的信息

參數(shù)

mpstat [-P {|ALL}] [internal [count]]

  • -P {|ALL} 表示監(jiān)控哪個(gè)CPU, cpu在[0,cpu個(gè)數(shù)-1]中取值
  • internal 相鄰的兩次采樣的間隔時(shí)間、
  • count 采樣的次數(shù),count只能和delay一起使用
    當(dāng)沒有參數(shù)時(shí),mpstat則顯示系統(tǒng)啟動以后所有信息的平均值。有interval時(shí),第一行的信息自系統(tǒng)啟動以來的平均信息。從第二行開始,輸出為前一個(gè)interval時(shí)間段的平均信息。

字段說明:

  • %usr:表示用戶進(jìn)程所使用CPU的百分比
  • %nice:表示使用nice命令對進(jìn)程進(jìn)行降級時(shí)CPU的百分比 %sys:表示內(nèi)核進(jìn)程使用CPU的百分比
  • %iowait:表示等待進(jìn)行 I/O 所使用 CPU 的時(shí)間百分比
  • %irq:表示用于處理系統(tǒng)中斷的 CPU 百分比
  • %soft:表示用于軟件中斷的 CPU 百分比
  • %steal : 顯示虛擬機(jī)管理器在服務(wù)另一個(gè)虛擬處理器時(shí)虛擬CPU處在非自愿等待下花費(fèi)時(shí)間的百分比
  • %guest : 顯示運(yùn)行虛擬處理器時(shí)CPU花費(fèi)時(shí)間的百分比
  • %idle:顯示 CPU 的空閑時(shí)間

pidstat命令

主要用于監(jiān)控全部或指定進(jìn)程占用系統(tǒng)資源的情況。但是我們一般都是用這個(gè)命令查看具體的某一個(gè)進(jìn)程的詳細(xì)情況。

  • -u:默認(rèn)的參數(shù),顯示各個(gè)進(jìn)程的cpu使用統(tǒng)計(jì)
  • -r:顯示各個(gè)進(jìn)程的內(nèi)存使用統(tǒng)計(jì)
  • -d:顯示各個(gè)進(jìn)程的IO使用情況
  • -p:指定進(jìn)程號
  • -w:顯示每個(gè)進(jìn)程的上下文切換情況
  • -t:顯示選擇任務(wù)的線程的統(tǒng)計(jì)信息外的額外信息
  • -T { TASK | CHILD | ALL }
    這個(gè)選項(xiàng)指定了pidstat監(jiān)控的。TASK表示報(bào)告獨(dú)立的task,CHILD關(guān)鍵字表示報(bào)告進(jìn)程下所有線程統(tǒng)計(jì)信息。ALL表示報(bào)告獨(dú)立的task和task下面的所有線程。
    注意:task和子線程的全局的統(tǒng)計(jì)信息和pidstat選項(xiàng)無關(guān)。這些統(tǒng)計(jì)信息不會對應(yīng)到當(dāng)前的統(tǒng)計(jì)間隔,這些統(tǒng)計(jì)信息只有在子線程kill或者完成的時(shí)候才會被收集。
  • -V:版本號
  • -h:在一行上顯示了所有活動,這樣其他程序可以容易解析。
  • -I:在SMP環(huán)境,表示任務(wù)的CPU使用率/內(nèi)核數(shù)量
  • -l:顯示命令名和所有參數(shù)

但是我們還是經(jīng)常這樣使用這個(gè)命令:

查看11321這個(gè)進(jìn)程的cpu使用情況

字段說明

  • PID:進(jìn)程ID
  • %usr:進(jìn)程在用戶空間占用cpu的百分比
  • %system:進(jìn)程在內(nèi)核空間占用cpu的百分比
  • %guest:進(jìn)程在虛擬機(jī)占用cpu的百分比
  • %CPU:進(jìn)程占用cpu的百分比
  • CPU:處理進(jìn)程的cpu編號
  • Command:當(dāng)前進(jìn)程對應(yīng)的命令

更多的使用詳情可以查看這篇文章

內(nèi)存

free 命令

這是我們用來查看系統(tǒng)內(nèi)存信息最常用的命令。

參數(shù)

  • -b:以Byte為單位顯示內(nèi)存使用情況;
  • -k:以KB為單位顯示內(nèi)存使用情況;
  • -m:以MB為單位顯示內(nèi)存使用情況;
  • -g:以GB為單位顯示內(nèi)存的使用情況;
  • -o:不顯示緩沖區(qū)調(diào)節(jié)列;
  • -s<間隔秒數(shù)>:持續(xù)觀察內(nèi)存使用狀況;
  • -t:顯示內(nèi)存總和列;
  • -V:顯示版本信息。

字段說明

  • total 內(nèi)存總數(shù): 15.7G
  • used 已經(jīng)使用的內(nèi)存數(shù): 15.6G
  • free 空閑的內(nèi)存數(shù): 93M
  • shared 當(dāng)前已經(jīng)廢棄不用,總是0
  • buffers Buffer 緩存內(nèi)存數(shù): 298M
  • cached Page 緩存內(nèi)存數(shù):14G

pidstat 命令

前面我們講解了pidstat命令,但是這里我們也用這個(gè)命令來查看內(nèi)存情況。

pidstat -p 進(jìn)程號 -r 采樣每隔秒數(shù)

字段說明

  • minflt/s: 每秒次缺頁錯誤次數(shù)(minor page faults),次缺頁錯誤次數(shù)意即虛擬內(nèi)存地址映射成物理內(nèi)存地址產(chǎn)生的page fault次數(shù)
  • majflt/s: 每秒主缺頁錯誤次數(shù)(major page faults),當(dāng)虛擬內(nèi)存地址映射成物理內(nèi)存地址時(shí),相應(yīng)的page在swap中,這樣的page fault為major page fault,一般在內(nèi)存使用緊張時(shí)產(chǎn)生
  • VSZ: 該進(jìn)程使用的虛擬內(nèi)存(以kB為單位)
  • RSS: 該進(jìn)程使用的物理內(nèi)存(以kB為單位)
  • %MEM: 該進(jìn)程使用內(nèi)存的百分比
  • Command: 拉起進(jìn)程對應(yīng)的命令

硬盤

df 命令

參數(shù)

  • -a:--all,顯示所有的文件系統(tǒng),包括虛擬文件系統(tǒng),參考示例2。
  • -B:--block-size,指定單位大小。比如1k,1m等,參考示例3。
  • -h:--human-readable,以人們易讀的GB、MB、KB等格式顯示,參考示例4。
  • -H:--si,和-h參數(shù)一樣,但是不是以1024,而是1000,即1k=1000,而不是1k=1024。
  • -i:--inodes,不用硬盤容量,而是以inode的數(shù)量來顯示,參考示例5。
  • -k:以KB的容量顯示各文件系統(tǒng),相當(dāng)于--block-size=1k。
  • -m:以KB的容量顯示各文件系統(tǒng),相當(dāng)于--block-size=1m。
  • -l:--local,只顯示本地文件系統(tǒng)。
  • --no-sync:在統(tǒng)計(jì)使用信息之前不調(diào)用sync命令(默認(rèn))。
  • -sync:在統(tǒng)計(jì)使用信息之前調(diào)用sync命令。
  • -P:--portability,使用POSIX格式顯示,參考示例6。
  • -t:--type=TYPE,只顯示指定類型的文件系統(tǒng),參考示例7。
  • -T:--print-type,顯示文件系統(tǒng)類型,參考示例8。
  • -x:--exclude-type=TYPE,不顯示指定類型的文件系統(tǒng)。
  • --help:顯示幫助信息。
  • --version:顯示版本信息。

雖然有這么多的參數(shù),但是我們還是常用 df -h直接查看所有的磁盤信息。

字段說明

  • Filesystem:代表該文件系統(tǒng)時(shí)哪個(gè)分區(qū),所以列出的是設(shè)備名稱。
    1K-blocks:說明下面的數(shù)字單位是1KB,可利用-h或-m來改變單位大小,也可以用-B來設(shè)置。
  • Used:已經(jīng)使用的空間大小。
  • Available:剩余的空間大小。
  • Use%:磁盤使用率。如果使用率在90%以上時(shí),就需要注意了,避免磁盤容量不足出現(xiàn)系統(tǒng)問題,尤其是對于文件內(nèi)容增加較快的情況(如/home、/var/spool/mail等)。
  • Mounted on:磁盤掛載的目錄,即該磁盤掛載到了哪個(gè)目錄下面。

磁盤I/O

iostat 命令

參數(shù)

  • -c: 僅顯示CPU統(tǒng)計(jì)信息.與-d選項(xiàng)互斥.
  • -d: 僅顯示磁盤統(tǒng)計(jì)信息.與-c選項(xiàng)互斥.
  • -k: 以K為單位顯示每秒的磁盤請求數(shù),默認(rèn)單位塊.
  • -p: device | ALL
    與-x選項(xiàng)互斥,用于顯示塊設(shè)備及系統(tǒng)分區(qū)的統(tǒng)計(jì)信息.也可以在-p后指定一個(gè)設(shè)備名.
  • -t 在輸出數(shù)據(jù)時(shí),打印搜集數(shù)據(jù)的時(shí)間.
  • -V 打印版本號和幫助信息.
  • -x 輸出擴(kuò)展信息.

字段說明

  • rrqm/s: 將讀入請求合并后,每秒發(fā)送到設(shè)備的讀入請求數(shù).
  • wrqm/s: 將寫入請求合并后,每秒發(fā)送到設(shè)備的寫入請求數(shù).
  • r/s: 每秒發(fā)送到設(shè)備的讀入請求數(shù).
  • w/s: 每秒發(fā)送到設(shè)備的寫入請求數(shù).
  • rsec/s: 每秒從設(shè)備讀入的扇區(qū)數(shù).
  • wsec/s: 每秒向設(shè)備寫入的扇區(qū)數(shù).
  • rkB/s: 每秒從設(shè)備讀入的數(shù)據(jù)量,單位為K.
  • wkB/s: 每秒向設(shè)備寫入的數(shù)據(jù)量,單位為K.
  • avgrq-sz: 發(fā)送到設(shè)備的請求的平均大小,單位是扇區(qū).
  • avgqu-sz: 發(fā)送到設(shè)備的請求的平均隊(duì)列長度.
  • await: I/O請求平均執(zhí)行時(shí)間.包括發(fā)送請求和執(zhí)行的時(shí)間.單位是毫秒.
  • svctm: 發(fā)送到設(shè)備的I/O請求的平均執(zhí)行時(shí)間.單位是毫秒.
  • %util: 在I/O請求發(fā)送到設(shè)備期間,占用CPU時(shí)間的百分比.用于顯示設(shè)備的帶寬利用率. 當(dāng)這個(gè)值接近100%時(shí),表示設(shè)備帶寬已經(jīng)占滿.

pidstat 命令

pidstat -d 采樣間隔時(shí)間 -p 進(jìn)程id

字段說明

  • PID:進(jìn)程id
  • kB_rd/s:每秒從磁盤讀取的KB
  • kB_wr/s:每秒寫入磁盤KB
  • kB_ccwr/s:任務(wù)取消的寫入磁盤的KB。當(dāng)任務(wù)截?cái)嗯K的pagecache的時(shí)候會發(fā)生。
  • COMMAND:task的命令名

網(wǎng)絡(luò)I/O

ifstat 命令

參數(shù)

  • -l: 監(jiān)測環(huán)路網(wǎng)絡(luò)接口。缺省情況下ifstat監(jiān)測活動的所有非環(huán)路網(wǎng)絡(luò)接口
  • -a: 監(jiān)測能檢測到的所有網(wǎng)絡(luò)接口的狀態(tài)信息。
  • -z: 隱藏流量是無的接口,如接口啟動了但是未使用的。
  • -i: <interface> 指定要監(jiān)測的接口。
  • -s: 通過SNMP查詢一個(gè)遠(yuǎn)程主機(jī)。
  • -h: 顯示幫助信息
  • -n: 關(guān)閉周期性顯示頭部信息。
  • -t: 在每一行的開頭加一個(gè)時(shí)間戳
  • -T: 報(bào)告所有檢測接口的全部帶寬
  • -w: 指定間隔時(shí)間(與官方的文檔說明并不同,不知道是不是寫文檔的人寫錯,反正我測試后是間隔時(shí)間)
  • -W: 如果顯示內(nèi)容超出終端窗口的寬度,就換行
  • -S: 在同一行更新顯示內(nèi)容
  • -b: 用kbits/s顯示帶寬
  • -q: 按鍵模式
  • -v: 顯示版本信息
  • -d: 指定一個(gè)驅(qū)動來收集狀態(tài)信息

每秒輸出一次網(wǎng)絡(luò)IO信息

其中的 eth0 為網(wǎng)卡。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容