Linux

我可以以某種方式區分交換抖動和非交換高 IO 延遲嗎?

  • February 16, 2022

每次我複製 VM 映像時,我的系統都會變得非常、非常少響應。我正在使用virt-manager,我可以看到 IO 是由多個qemu-img convert執行緒執行的。

我試圖收集一些資訊,看起來可能有很多交換(交換分區上的 I/O)。我有 8GB 記憶體和 2GB 交換空間。在複製期間和之後,free -h顯示已使用 100% 的交換空間。但是,這並不能告訴我當時系統交換了多少。在我複製 VM 之前,某些東西可能已經填充了交換。

我正在使用機械硬碟。我目前的作業系統是 Fedora Linux 28。

當這種情況發生時,我該如何準備,收集相關資訊,看看是否有很多交換?

我想要一些我可以回顧並整理不同資訊的記錄。即,如果我執行一個簡單的topiotop命令,他們將覆蓋他們的舊輸出,我不希望這樣。

更新

正如我在原始答案中所建議的那樣,我仍然認為收集這樣的資訊很有用。但:

我發現我的系統幾乎完全沒有響應的兩個最大原因。它們都與顛簸無關(交換或非交換)。

首先在gnome-shell. 它在主執行緒中等待 fsync()。這是(Wayland)圖形伺服器的主執行緒。在等待期間,顯示不會更新。該錯誤在 gnome-shell 3.30.2 中被觀察到,並且應該在 3.32 版本中得到修復

(可以通過將 GNOME 的 Wayland 會話與 Xorg 會話進行比較來診斷這一點。在 Xorg 會話中,滑鼠游標應該仍然能夠移動)。

第二個問題是 ext4 的一個已知問題。在寫入文件時,其他文件上的 fsync() 可能“最終等待無限時間”。所以這會影響 gnome-shell 錯誤。

即使修復了 gnome-shell,ext4 中的長時間延遲似乎也會影響 Firefox。上述 ext4 問題的修復已合併到 Linux 核心版本 5.3。$$ 1 $$$$ 2 $$.

血淋淋的細節記錄在這裡:簡單的文件複製(或寫入)在 Linux 文件系統上導致十秒以上的延遲

vmstat是跟踪記憶體、交換和 IO 的傳統 Linux 命令。例如vmstat 5,將每 5 秒列印一行統計資訊。

atop是一個較新的工具,非常強大。執行atop看起來類似於top,但它包含更多資訊。當你想要一個日誌時,atop -w <file>將改為寫一個二進制日誌,可以用atop -r <file>. 該atop軟體包還包括一項自動寫入日誌的服務,使用 10 分鐘間隔(預設情況下)。

更新:atop2.4.0 增加了對 Linux Pressure Stall Information的支持。我希望這將有助於檢測由於記憶體壓力導致的停頓。記憶體壓力統計(顯示為msmfatop可以檢測交換和非交換抖動。從技術上講,這意味著它無助於區分交換和非交換抖動:-)。但我很想知道這些資訊。我沒有太多確認顛簸是我的問題……而且在更新中證明,顛簸實際上不是主要問題。

關於我遇到的主要問題:我認為收集這方面的資訊更加困難。有一種通用的跟踪方法可能會有所幫助:offcputime --state 2. 儘管安裝此工具需要一些努力。

上一個答案

我已經atop安裝了一個解決方法,可以在我將筆記型電腦掛起一夜之間使其正常工作

atop如果您長期存在記憶體消耗問題,該服務的日誌可以提供非常豐富的資訊。它可能會錯過較短的問題(由於預設的 10 分鐘記錄間隔)。

  • 我的問題看起來持續了 10-20 分鐘。
  • 交換使用量從之前樣本中的 1.4G 上升到 2G (100%)。
  • 執行緒本身在 RAM 中的qemu-img大小並不大。該qemu-img程序只有 2500 萬駐留。
  • swout175735。這是以 4096 字節的頁面來衡量的,這意味著大約 0.7G 被換出。

同時,cache從0.8G增長到2.3G。 free記憶體保持在0.1G。

我懷疑 qemu-img 正在做記憶體 IO,記憶體正在推出其他記憶體,這就是導致交換的原因。如果我沒有交換空間,我預計還會有一些問題;即載入的程式碼和其他記憶體將被逐出。

如果我drop_cachescp一個16G的文件,我可以觸發相當多的交換。我認為同樣的問題正在被複製cp;我不認為這僅限於qemu-img convert.

引用自:https://unix.stackexchange.com/questions/479921