vmstate 命令詳解2022

来源:https://www.cnblogs.com/xiong97/archive/2022/06/18/16388836.html
-Advertisement-
Play Games

vmstat 是一個查看虛擬記憶體(Virtual Memory)使用狀況的工具,但是怎樣通過 vmstat 來發現系統中的瓶頸呢? 1。 使用vmstat 使用前我們先看下命令介紹及參數定義 Usage: vmstat [options] [delay [count]] Options: -a, - ...


vmstat 是一個查看虛擬記憶體(Virtual Memory)使用狀況的工具,但是怎樣通過 vmstat 來發現系統中的瓶頸呢?

1。 使用vmstat

使用前我們先看下命令介紹及參數定義

Usage:
 vmstat [options] [delay [count]]

Options:
 -a, --active           active/inactive memory
 -f, --forks            number of forks since boot
 -m, --slabs            slabinfo
 -n, --one-header       do not redisplay header
 -s, --stats            event counter statistics
 -d, --disk             disk statistics
 -D, --disk-sum         summarize disk statistics
 -p, --partition <dev>  partition specific statistics
 -S, --unit <char>      define display unit
 -w, --wide             wide output
 -t, --timestamp        show timestamp

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see vmstat(8).

中文翻譯

  • -a:顯示活躍和非活躍記憶體
    -f:顯示從系統啟動至今的 fork 數量 。
    -m:顯示 slabinfo
    -n:只在開始時顯示一次各欄位名稱。
    -s:顯示記憶體相關統計信息及多種系統活動數量。
    delay:刷新時間間隔。如果不指定,只顯示一條結果。
    count:刷新次數。如果不指定刷新次數,但指定了刷新時間間隔,這時刷新次數為無窮。
    -d:顯示磁碟相關統計信息。
    -p:顯示指定磁碟分區統計信息
    -S:使用指定單位顯示。參數有 k 、K 、m 、M ,分別代表 1000、1024、1000000、1048576 位元組(byte)。
    預設單位為 K(1024 bytes)
    -V:顯示 vmstat 版本信息。

2。實戰

例子:每 2 秒輸出一條結果

[root@k8s-master01 ~]# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 4  0      0 485092      0 1249236    0    0     3    19   47   31  1  1 98  0  0
 0  0      0 485364      0 1249364    0    0     0    34 2885 4952  1  3 97  0  0
 0  0      0 485472      0 1249368    0    0     0    34 2107 3561  1  1 98  0  0
 0  0      0 485316      0 1249368    0    0     0    60 1914 3326  1  1 98  0  0

結果如圖,對上面輸出結果含義解釋:

Procs(進程):
r: 運行的和等待(CPU 時間片)運行的進程數,這個值也可以判斷是否需要增加 CPU(長期大於 1)
b: 等待 IO 的進程數量,處於不可中斷狀態的進程數,常見的情況是由 IO 引起的
Memory(記憶體):
swpd: 使用虛擬記憶體大小,切換到交換記憶體上的記憶體(預設以 KB 為單位)
如果 swpd 的值不為 0,或者還比較大,比如超過 100M 了,但是 si, so 的值長期為 0,這種情況我們可以不用擔心,不會影響系統性能。
free: 空閑的物理記憶體
buff: 用作緩衝的記憶體大小
cache: 用作緩存的記憶體大小,文件系統的 cache,如果 cache 的值大的時候,說明 cache 住的文件數多,如果頻繁訪問到的文件都能被 cache 住,那麼磁碟的讀 IO bi 會非常小
Swap:
si: 每秒從交換區寫到記憶體的大小,交換記憶體使用,由磁碟調入記憶體
so: 每秒寫入交換區的記憶體大小,交換記憶體使用,由記憶體調入磁碟
記憶體夠用的時候,這 2 個值都是 0,如果這 2 個值長期大於 0 時,系統性能會受到影響。磁碟 IO 和CPU 資源都會被消耗

IO:
bi: 每秒讀取的塊數,從塊設備讀入的數據總量(讀磁碟) (KB/s)
bo: 每秒寫入的塊數,寫入到塊設備的數據總理(寫磁碟) (KB/s)
隨機磁碟讀寫的時候,這 2 個 值越大(如超出 1M),能看到 CPU 在 IO 等待的值也會越大
system:
in: 每秒中斷數,包括時鐘中斷。
cs: 每秒上下文切換數。
上面這 2 個值越大,會看到由內核消耗的 CPU 時間會越多
CPU(以百分比表示):

us: 用戶進程消耗的 CPU 時間百分比,us 的值比較高時,說明用戶進程消耗的 CPU 時間多,但是如果長期超過 50% 的使用,那麼我們就該考慮優化程式演算法或者進行加速了
sy: 內核進程消耗的 CPU 時間百分比,sy 的值高時,說明系統內核消耗的 CPU 資源多,這並不是良性的表現,我們應該檢查原因。
id: CPU 處在空閑狀態時間百分比(包括 IO 等待時間)
wa: IO 等待消耗的 CPU 時間百分比,wa 的值高時,說明 IO 等待比較嚴重

3。 問題處理中,如何運用?

現象:
1。)如果在processes中運行的序列(process r)是連續的大於在系統中的CPU的個數表示系統現在運行比較慢,有多數的進程等待 CPU。
2。)如果 r 的輸出數大於系統中可用 CPU 個數的 4 倍的話,則系統面臨著 CPU 短缺的問題,或者是 CPU 的速率過低,系統中有多數的進程在等待 CPU,造成系統中進程運行過慢。
3。)如果空閑時間(cpu id)持續為 0 並且系統時間(cpu sy)是用戶時間的兩倍(cpu us)系統則面臨著 CPU 資源的短缺。

辦法建議:

1。調節 applications & servers 使得對記憶體和 cache 的使用更加有效。例如:先調整應用程式對 CPU 的占用情況。使得應用程式能夠更有效的使用 CPU、聯繫DBA查看是否有SQL語句堵塞。
2。增加系統的記憶體或者CPU。

實戰例子:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 7  0      0 475416      0 1251908    0    0     0   441 1961 3307  0  1 98  0  0
 1  0      0 475372      0 1251908    0    0     0    32 1785 3083  1  1 98  0  0
 0  0      0 475744      0 1251916    0    0     0    34 1891 3259  0  1 98  0  0
 2  0      0 475744      0 1251916    0    0     0    18 1935 3381  1  1 98  0  0
 0  0      0 475512      0 1251920    0    0     0    29 2062 3533  2  1 97  0  0
 0  0      0 475884      0 1251920    0    0     0    22 1988 3410  0  1 99  0  0
 0  0      0 475760      0 1251924    0    0     0    22 1757 3040  1  1 98  0  0
 0  0      0 475340      0 1251924    0    0     0    28 2001 3415  0  2 98  0  0
 0  0      0 475636      0 1251924    0    0     0    16 1941 3341  1  1 98  0  0
 0  0      0 475264      0 1251928    0    0     0    29 1986 3408  1  1 98  0  0
 0  0      0 475264      0 1251928    0    0     0    34 2112 3490  1  1 98  0  0
 0  0      0 469308      0 1252084    0    0     0   487 2973 5094  2  3 96  0  0
 0  0      0 471872      0 1252004    0    0     0   212 3007 5139  1  3 96  0  0
 0  0      0 472368      0 1251972    0    0     0   156 2331 3936  1  2 97  0  0
 0  0      0 472632      0 1251976    0    0     0    35 2119 3705  1  2 97  0  0
 0  0      0 472236      0 1251976    0    0     0   425 2018 3372  0  1 99  0  0
 0  0      0 472384      0 1251980    0    0     0    17 1807 3101  1  1 98  0  0

根據觀察值,我們可以得到以下結論:
1。有大量的中斷(in) 和較多的上下文切換(cs)。這意味著存在多個的進程在產生對硬體設備的請求。
2。進一步顯示某單個應用,user time(us)利用率低,說明應用用戶進程使用較少。
3。cpu id 經常保持再98%附近,說明當前系統基本上無負載壓力。


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

-Advertisement-
Play Games
更多相關文章
  • 程式員都知道寫代碼是一件低調又枯燥的事情,一天到晚盯著電腦屏幕看。怎麼能讓寫代碼變成一件酷炫的事情,那就從裝扮編輯器開始。 安裝了這些插件,保證同事看到後,都會問你。 兄弟,你安裝了什麼插件,讓我也裝一下。 1. 先換個漂亮主題 Vuesion Theme Idea編輯器的界麵灰矇矇的,有點性冷淡的 ...
  • 一、題目 描述 給定一個僅包含0和1的n*n二維矩陣,請計算二維矩陣的最大值。 計算規則如下 1、每行元素按下標順序組成一個二進位數(下標越大約排在低位),二進位數的值就是該行的值,矩陣各行之和為矩陣的值 2、允許通過向左或向右整體迴圈移動每個元素來改變元素在行中的位置 比如:[1,0,1,1,1] ...
  • 做下記錄, 首先插入一個dataGridView控制項,兩個button按鈕(導入數據,導出數據),一個ComboBox(獲取列標題使用),一個textbox(輸入關鍵字),一個定位按鈕(定位使用) 1,導入數據(NPOI) 1 2 private void daoRuShuJu_cmd_Click( ...
  • 最近在看 C++ 的方法和類模板,我就在想 C# 中也是有這個概念的,不過叫法不一樣,人家叫模板,我們叫泛型,哈哈,有點意思,這一篇我們來聊聊它們底層是怎麼玩的? 一:C++ 中的模板玩法 畢竟 C++ 是相容 C 語言,而 C 是過程式的玩法,所以 C++ 就出現了兩種模板類型,分別為:函數模板 ...
  • 一、CDN是什麼? CDN的全稱是Content Delivery Network,即內容分髮網絡。其目的是通過在現有的Internet中增加一層新的CACHE(緩存)層,將網站的內容發佈到最接近用戶的網路”邊緣“的節點,使用戶可以就近取得所需的內容(就近原則),提高用戶訪問網站的響應速度。從技術上 ...
  • Air105 有 1 個 Timer 單元,包含 8 個獨立定時器: Timer0 到 Time7, 8 個定時器中斷源獨立,每個定時器單獨占 1 個中斷源, 使用 PCLK 時鐘頻率作為定時器計時鐘源, 定時器採用向下計數方式. 每個 Timer 單元定時器都支持 PWM 模式, PWM 模式最高... ...
  • #一、防火牆配置 前言:電腦的防火牆配置保證了別的主機無法訪問本機非開放埠 1、防火牆介紹 Linux預設防火牆是開啟的,而且所以的埠對外都是不可訪問的,該策略保證了電腦的安全 但同時也帶來了問題如:其他電腦無法訪問本機上項目開啟的埠號 在Linux上安裝Tomcat,Tomcat軟體需 ...
  • 一、功能變數名稱系統概述 功能變數名稱系統DNS(Domain Name System)是網際網路使用的命名系統,用來把便於人們使用的機器名字轉換成為IP地址。功能變數名稱系統其實就是名字系統。為什麼不叫“名字”而叫“功能變數名稱”呢?這是因為在這種網際網路的命名系統中使用了許多的“域(domain)”,因此就出現了“功能變數名稱”這個名詞。 ...
一周排行
    -Advertisement-
    Play Games
  • 一、openKylin簡介 openKylin(開放麒麟) 社區是在開源、自願、平等和協作的基礎上,由基礎軟硬體企業、非營利性組織、社團組織、高等院校、科研機構和個人開發者共同創立的一個開源社區,致力於通過開源、開放的社區合作,構建桌面操作系統開源社區,推動Linux開源技術及其軟硬體生態繁榮發展。 ...
  • 簡介 Flurl是一個用於構建基於HTTP請求的C#代碼的庫。它的主要目的是簡化和優雅地處理網路請求(只用很少的代碼完成請求)。Flurl提供了一種簡單的方法來構建GET、POST、PUT等類型的請求,以及處理響應和異常。它還提供了一些高級功能,如鏈式調用、緩存請求結果、自動重定向等。本文將介紹Fl ...
  • 一:背景 1. 講故事 最近也挺奇怪,看到了兩起 CPU 爆高的案例,且誘因也是一致的,覺得有一些代表性,合併分享出來幫助大家來避坑吧,閑話不多說,直接上 windbg 分析。 二:WinDbg 分析 1. CPU 真的爆高嗎 這裡要提醒一下,別人說爆高不一定真的就是爆高,我們一定要拿數據說話,可以 ...
  • 剛開始寫文章,封裝Base基類的時候,添加了trycatch異常塊,不過當時沒有去記錄日誌,直接return了。有小伙伴勸我不要吃了Exception 其實沒有啦,項目剛開始,我覺得先做好整體結構比較好。像是蓋樓一樣。先把樓體建造出來,然後再一步一步的美化完善。 基礎的倉儲模式已經ok,Autofa ...
  • 框架目標 什麼是框架,框架能做到什麼? 把一個方向的技術研發做封裝,具備通用性,讓使用框架的開發者用起來很輕鬆。 屬性: 通用性 健壯性 穩定性 擴展性 高性能 組件化 跨平臺 從零開始-搭建框架 建立項目 主鍵查詢功能開發 綁定實體 一步一步的給大家推導: 一邊寫一邊測試 從零開始--搭建框架 1 ...
  • 大家好,我是沙漠盡頭的狼。 本方首發於Dotnet9,介紹使用dnSpy調試第三方.NET庫源碼,行文目錄: 安裝dnSpy 編寫示常式序 調試示常式序 調試.NET庫原生方法 總結 1. 安裝dnSpy dnSpy是一款功能強大的.NET程式反編譯工具,可以對.NET程式進行反編譯,代替庫文檔的功 ...
  • 在`Windows`操作系統中,每個進程的虛擬地址空間都被劃分為若幹記憶體塊,每個記憶體塊都具有一些屬性,如記憶體大小、保護模式、類型等。這些屬性可以通過`VirtualQueryEx`函數查詢得到。該函數可用於查詢進程虛擬地址空間中的記憶體信息的函數。它的作用類似於`Windows`操作系統中的`Task... ...
  • 背景介紹 1,最近有一個大數據量插入的操作入庫的業務場景,需要先做一些其他修改操作,然後在執行插入操作,由於插入數據可能會很多,用到多線程去拆分數據並行處理來提高響應時間,如果有一個線程執行失敗,則全部回滾。 2,在spring中可以使用@Transactional註解去控制事務,使出現異常時會進行 ...
  • 線程(thread)是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際 運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以併發多個線程,每條線 程並行執行不同的任務。 ...
  • 發現Java 21的StringBuilder和StringBuffer中多了repeat方法: /** * @throws IllegalArgumentException {@inheritDoc} * * @since 21 */ @Override public StringBuilder ...