性能監控之 Linux 命令 top、vmstat、iostat、free、iftop 基礎

      網友投稿 971 2025-03-31

      前言


      top

      vmstat

      iostat

      free

      iftop

      前言

      top

      vmstat

      iostat

      free

      iftop

      前言

      “子曰:“溫故而知新,可以為師矣?!?/p>

      -----《論語》

      top

      執行命令:

      top [-] [d] [p] [q] [c] [C] [S] [s] [n]

      性能監控之 Linux 命令 top、vmstat、iostat、free、iftop 基礎

      參數說明:

      d:指定每兩次屏幕信息刷新之間的時間間隔。當然用戶可以使用 s 交互命令來改變之。

      p:通過指定監控進程 ID 來僅僅監控某個進程的狀態。

      q:該選項將使 top 沒有任何延遲的進行刷新。如果調用程序有超級用戶權限,那么top將以盡可能高的優先級運行。

      S:指定累計模式。

      s:使 top 命令在安全模式中運行。這將去除交互命令所帶來的潛在危險。

      i:使 top 不顯示任何閑置或者僵死進程。

      c:顯示整個命令行而不只是顯示命令名。

      命令說明:

      系統運行時間和平均負載:

      top - 20:20:16 up 16:18, 4 users, load average: 0.00, 0.01, 0.04

      top 命令的頂部顯示與 uptime 命令相似的輸出

      這些字段顯示:

      當前時間

      系統已運行的時間

      當前登錄用戶的數量

      相應最近 1、5 和 15 分鐘內的平均負載。

      可以使用 ‘l’ 命令切換 uptime 的顯示

      任務

      Tasks: 112 total, 1 running, 104 sleeping, 7 stopped, 0 zombie

      Tasks — 任務(進程),系統現在共有 122 個進程,其中處于運行中的有 1 個,103 個在休眠(sleep),stoped 狀態的有7個,zombie 狀態(僵尸)的有 0 個,這些進程概括信息可以用 ‘t’ 切換顯示。

      CPU 狀態

      %Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

      這里顯示不同模式下所占 cpu 時間百分比,這些不同的 cpu 時間表示:

      us, user:運行(未調整優先級的) 用戶進程的CPU時間

      sy,system: 運行內核進程的CPU時間

      ni,niced:運行已調整優先級的用戶進程的CPU時間

      wa,IO wait: 用于等待IO完成的CPU時間

      hi:處理硬件中斷的 CPU 時間

      si: 處理軟件中斷的 CPU 時間

      st:這個虛擬機被 hypervisor 偷去的 CPU 時間(譯注:如果當前處于一個 hypervisor 下的 vm,實際上hypervisor 也是要消耗一部分 CPU 處理時間的)。

      可以使用 ‘t’ 命令切換顯示。

      0.0% us — 用戶空間占用 CPU 的百分比

      0.3% sy — 內核空間占用 CPU 的百分比

      0.0% ni — 改變過優先級的進程占用 CPU 的百分比

      99.7% id — 空閑 CPU 百分比

      0.0% wa — IO 等待占用 CPU 的百分比

      0.0% hi — 硬中斷(Hardware IRQ)占用 CPU 的百分比

      0.0% si — 軟中斷(Software Interrupts)占用 CPU 的百分比

      內存使用

      KiB Mem : 995896 total, 432992 free, 168912 used, 393992 buff/cache KiB Swap: 2097148 total, 2084084 free, 13064 used. 621592 avail Mem

      接下來兩行顯示內存使用率,有點像 ‘free’ 命令。

      第一行是物理內存使用

      物理內存顯示如下:全部可用內存、已使用內存、空閑內存、緩沖內存。

      第二行是虛擬內存使用(交換空間)

      交換部分顯示的是:全部、已使用、空閑和緩沖交換空間。

      內存顯示可以用’m’命令切換。

      995896 total — 物理內存總量

      168912k used — 使用中的內存總量

      432992 k free — 空閑內存總量

      393992k buffers — 緩存的內存量

      swap 交換分區:

      2097148k total — 交換區總量

      13064k used — 使用的交換區總量

      2084084k free — 空閑交換區總量

      621592k cached — 緩沖的交換區總量

      第四行中使用中的內存總量(used)指的是現在系統內核控制的內存數

      空閑內存總量(free)是內核還未納入其管控范圍的數量。納入內核管理的內存不見得都在使用中,還包括過去使用過的現在可以被重復利用的內存,內核并不把這些可被重新使用的內存交還到free中去,因此在linux上free內存會越來越少,但不用為此擔心。

      如果出于習慣去計算可用內存數,這里有個近似的計算公式:

      第四行的

      f

      r

      e

      e

      +

      第四行的

      b

      u

      f

      f

      e

      r

      s

      +

      第五行的

      c

      a

      c

      h

      e

      d

      =

      服務器的可用內存

      第四行的free + 第四行的buffers + 第五行的cached=服務器的可用內存

      第四行的free+第四行的buffers+第五行的cached=服務器的可用內存

      對于內存監控,在 top 里我們要時刻監控第五行 swap 交換分區的used,如果這個數值在不斷的變化,說明內核在不斷進行內存和 swap 的數據交換,這是真正的內存不夠用了。

      各進程(任務)的狀態監控

      參數說明:

      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:運行進程所使用的命令。進程名稱(命令名/命令行)

      交互命令 - ‘h’幫助命令

      在 top 基本視圖中,按鍵盤數字“1”,可監控每個邏輯 CPU 的狀況:(本虛擬機就是一個 cpu)

      監控 Java 線程數:

      ps -eLf | grep java | wc -l

      監控網絡客戶連接數:

      netstat -n | grep tcp | grep 偵聽端口 | wc -l

      vmstat

      2 表示每個兩秒采集一次服務器狀態

      1表示只采集一次。

      結構說明:

      r :表示運行隊列(就是說多少個進程真的分配到 CPU),我測試的服務器目前 CPU 比較空閑,沒什么程序在跑,當這個值超過了 CPU 數目,就會出現 CPU 瓶頸了。這個也和 top 的負載有關系,一般負載超過了 3 就比較高,超過了 5 就高,超過了 10 就不正常了,服務器的狀態很危險。top 的負載類似每秒的運行隊列。如果運行隊列過大,表示你的 CPU 很繁忙,一般會造成 CPU 使用率很高。

      b:表示阻塞的進程,這個不多說,進程阻塞,大家懂的。

      swap:虛擬內存已使用的大小,如果大于0,表示你的機器物理內存不足了,如果不是程序內存泄露的原因,那么你該升級內存了或者把耗內存的任務遷移到其他機器。

      free:空閑的物理內存的大小,我的機器內存總共 8G,剩余 3415M。

      buff:linux/Unix 系統是用來存儲,目錄里面有什么內容,權限等的緩存,我本機大概占用300多M

      cache:cache 直接用來記憶我們打開的文件,給文件做緩沖,我本機大概占用300多M(這里是Linux/Unix的聰明之處,把空閑的物理內存的一部分拿來做文件和目錄的緩存,是為了提高 程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。)

      si:每秒從磁盤讀入虛擬內存的大小,如果這個值大于 0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。我的機器內存充裕,一切正常。

      so:每秒虛擬內存寫入磁盤的大小,如果這個值大于 0,同上。

      bi:塊設備每秒接收的塊數量,這里的塊設備是指系統上所有的磁盤和其他塊設備,默認塊大小是 1024 byte,我本機上沒什么 IO 操作,所以一直是 0,但是我曾在處理拷貝大量數據(2-3T)的機器上看過可以達到140000/s,磁盤寫入速度差不多140M每秒

      bo:塊設備每秒發送的塊數量,例如我們讀取文件,bo 就要大于0。bi和bo一般都要接近0,不然就是IO過于頻繁,需要調整。

      in:每秒 CPU 的中斷次數,包括時間中斷

      cs:每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在 apache 和 nginx 這種 web 服務器中,我們一般做性能測試時會進行幾千并發甚至幾萬并發的測試,選擇 web 服務器的進程可以由進程或者線程的峰值一直下調,壓測,直到 cs 到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要盡量避免頻繁調用系統函數。上下文切換次數過多表示你的 CPU 大部分浪費在上下文切換,導致 CPU 干正經事的時間少了,CPU沒有充分利用,是不可取的。

      us:用戶 CPU 時間,我曾經在一個做加密解密很頻繁的服務器上,可以看到us接近100,r運行隊列達到80(機器在做壓力測試,性能表現不佳)。us的值比較高時,說明用戶進程消耗的CPU時間多,但是如果長期超50%的使用,那么我們就該考慮優化程序算法或者進行加速。

      sy:系統 CPU 時間,如果太高,表示系統調用時間長,例如是 IO 操作頻繁。

      id:空閑 CPU時間,一般來說,id + us + sy = 100,一般我認為 id 是空閑 CPU 使用率,us 是用戶 CPU 使用率,sy是系統 CPU 使用率。

      wt:等待 IO CPU 時間。注意:wa 的值高時,說明 IO等 待比較嚴重,這可能由于磁盤大量作隨機訪問造成,也有可能磁盤出現瓶頸(塊操作)。

      iostat

      安裝方法:

      yum install sysstat

      iostat [參數] [時間] [次數]

      參數說明:

      -c:顯示 CPU 使用情況

      -d:顯示磁盤使用情況

      -k:以 K 為單位顯示

      -m:以 M 為單位顯示

      -N:顯示磁盤陣列(LVM) 信息

      -n:顯示 NFS 使用情況

      -p:可以報告出每塊磁盤的每個分區的使用情況

      -t:顯示終端和 CPU 的信息

      -x:顯示詳細信息

      rrqm/s:每秒這個設備相關的讀取請求有多少被 Merge了(當系統調用需要讀取數據的時候,VFS 將請求發到各個 FS,如果 FS 發現不同的讀取請求讀取的是相同 Block 的數據,FS會將這個請求合并Merge)

      wrqm/s:每秒這個設備相關的寫入請求有多少被 Merge 了

      rsec/s:每秒讀取的扇區數

      wsec/:每秒寫入的扇區數

      rKB/s:The number of read requests that were issued to the device per second

      wKB/s:The number of write requests that were issued to the device per second

      avgrq-sz 平均請求扇區的大小

      avgqu-sz 是平均請求隊列的長度。毫無疑問,隊列長度越短越好。

      await: 每一個IO請求的處理的平均時間(單位是微秒毫秒)。這里可以理解為 IO 的響應時間,一般地系統 IO 響應時間應該低于 5 ms,如果大于 10 ms 就比較大了。這個時間包括了隊列時間和服務時間,也就是說,一般情況下,await 大于 svctm,它們的差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統出了問題。

      svctm:表示平均每次設備 I/O 操作的服務時間(以毫秒為單位)。如果 svctm 的值與 await 很接近,表示幾乎沒有 I/O 等待,磁盤性能很好,如果 await 的值遠高于 svctm 的值,則表示 I/O 隊列等待太長,系統上運行的應用程序將變慢。

      %util:在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔 1 秒,該設備有 0.8 秒在處理IO,而 0.2 秒閑置,那么該設備的 %util = 0.8/1 = 80%,所以該參數暗示了設備的繁忙程度

      一般地,如果該參數是 100% 表示設備已經接近滿負荷運行了(當然如果是多磁盤,即使 %util 是 100%,因為磁盤的并發能力,所以磁盤使用未必就到了瓶頸)。

      常見用法:

      iostat -d -k 1 10 #查看 TPS 和吞吐量信息(磁盤讀寫速度單位為 KB) iostat -d -m 2 #查看 TPS 和吞吐量信息(磁盤讀寫速度單位為 MB) iostat -d -x -k 1 10 #查看設備使用率(%util)、響應時間(await) iostat -c 1 10 #查看 cpu 狀態 iostat -c 1 10 #查看 cpu 狀態

      注意點:

      網卡的大吞吐量可能導致更多的 cup

      大量的 cup 開銷又會增加更多內存使用請求

      大量內存與磁盤的請求可能導致更多的 cpu 以及 IO 問題

      free

      Mem:行(第二行)是內存的使用情況

      Swap:行(第三行)是交換空間的使用情況。

      total:列顯示系統總的可用物理內存和交換空間大小。

      used:列顯示已經被使用的物理內存和交換空間。

      free:列顯示還有多少物理內存和交換空間可用使用。

      shared:列顯示被共享使用的物理內存大小。

      buff/cache:列顯示被 buffer 和 cache 使用的物理內存大小。

      available:列顯示還可以被應用程序使用的物理內存大小。

      iftop

      界面相關說明:

      界面上面顯示的是類似刻度尺的刻度范圍,為顯示流量圖形的長條作標尺用的。

      中間的 <= => 這兩個左右箭頭,表示的是流量的方向。

      TX:發送流量

      RX:接收流量

      TOTAL:總流量

      Cumm:運行 iftop 到目前時間的總流量

      peak:流量峰值

      rates:分別表示過去 2s 10s 40s 的平均流量

      常用的參數:

      -i 設定監測的網卡,如:# iftop -i eth1

      -B 以bytes為單位顯示流量(默認是bits),如:# iftop -B

      -n 使host信息默認直接都顯示IP,如:# iftop -n

      -N 使端口信息默認直接都顯示端口號,如: # iftop -N

      -F 顯示特定網段的進出流量,如# iftop -F 100.100.30.25 或# iftop -F 100.100.30.25 /255.255.255.0

      -h(display this message),幫助,顯示參數信息

      -p 使用這個參數后,中間的列表顯示的本地主機信息,出現了本機以外的IP信息;

      -b 使流量圖形條默認就顯示;

      -f 這個暫時還不太會用,過濾計算包用的;

      -P 使 host 信息及端口信息默認就都顯示;

      -m 設置界面最上邊的刻度的最大值,刻度分五個大段顯示,例:# iftop -m 100M

      iftop(注意大小寫)

      常用操作:

      按 h 切換是否顯示幫助;

      按 n 切換顯示本機的 IP 或主機名;

      按 s 切換是否顯示本機的 host 信息;

      按 d 切換是否顯示遠端目標主機的 host 信息;

      按 t 切換顯示格式為 2 行/ 1 行/只顯示發送流量/只顯示接收流量;

      按 N 切換顯示端口號或端口服務名稱;

      按 S 切換是否顯示本機的端口信息;

      按 D 切換是否顯示遠端目標主機的端口信息;

      按 p 切換是否顯示端口信息;

      按 P 切換暫停/繼續顯示;

      按 b 切換是否顯示平均流量圖形條;

      按 B 切換計算 2 秒或 10 秒或 40 秒內的平均流量;

      按 T 切換是否顯示每個連接的總流量;

      按 l 打開屏幕過濾功能,輸入要過濾的字符,比如 ip,按回車后,屏幕就只顯示這個 IP 相關的流量信息;

      按 L 切換顯示畫面上邊的刻度;刻度不同,流量圖形條會有變化;

      按 j 或按 k 可以向上或向下滾動屏幕顯示的連接記錄;

      按 1 或 2 或 3 可以根據右側顯示的三列流量數據進行排序;

      按 < 根據左邊的本機名或IP排序;

      按 > 根據遠端目標主機的主機名或IP排序;

      按 o 切換是否固定只顯示當前的連接;

      按 f 可以編輯過濾代碼,這是翻譯過來的說法,我還沒用過這個!

      按 ! 可以使用 shell 命令,這個沒用過 !沒搞明白啥命令在這好用呢!

      按 q 退出監控。

      Linux 任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel表格因文件格式或擴展名無效打不開怎么修復
      下一篇:生產管理平臺推薦app(生產管理app免費)
      相關文章
      国产亚洲男人的天堂在线观看| 亚洲国产午夜精品理论片在线播放| 亚洲码和欧洲码一码二码三码| 亚洲av永久中文无码精品| 久久亚洲国产最新网站| 亚洲色精品vr一区二区三区| 亚洲乱码国产一区网址| 五月婷婷亚洲综合| 亚洲国产成人AV网站| 国产V亚洲V天堂无码| 亚洲天堂中文字幕在线| 亚洲AV无码精品国产成人| 亚洲伊人久久大香线焦| 日韩精品亚洲专区在线观看| 国产亚洲一卡2卡3卡4卡新区| 亚洲第一页在线播放| 4480yy私人影院亚洲| 亚洲男人的天堂在线| 亚洲免费视频观看| 亚洲乱码在线观看| 亚洲人成网亚洲欧洲无码| 久久精品国产亚洲AV大全| 亚洲无吗在线视频| 久久精品国产亚洲av麻豆小说| 亚洲精品免费在线| 亚洲VA中文字幕无码一二三区| 中文字幕中韩乱码亚洲大片| ASS亚洲熟妇毛茸茸PICS| 亚洲五月激情综合图片区| 亚洲人成网站18禁止一区| 亚洲av区一区二区三| 亚洲伊人久久成综合人影院| 亚洲av日韩aⅴ无码色老头| 亚洲成人黄色在线观看| 亚洲婷婷在线视频| 欧洲 亚洲 国产图片综合| 亚洲人成电影在线天堂| 亚洲乱人伦精品图片| 婷婷亚洲久悠悠色悠在线播放| 亚洲AV日韩AV天堂一区二区三区| 亚洲熟女少妇一区二区|