我可以以某种方式区分交换抖动和非交换高 IO 延迟吗?

我可以以某种方式区分交换抖动和非交换高 IO 延迟吗?

每次克隆虚拟机映像时,我的系统的响应速度就会变得非常非常慢。我正在使用virt-manager,我可以看到 IO 是由多个qemu-img convert线程执行的。

我尝试收集一些信息,看起来可能进行了大量交换(交换分区上的 I/O)。我有 8GB 内存和 2GB 交换空间。克隆期间和克隆之后,free -h显示 100% 的交换空间已使用。然而,这并没有告诉我当时系统交换了多少。在我克隆虚拟机之前,交换区可能已被某些东西填满。

我用的是机械硬盘。我当前的操作系统是 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 文件系统上十秒以上的延迟

答案1

vmstat是传统的 Linux 命令,用于跟踪内存、交换和 IO。例如vmstat 5每 5 秒打印一行统计信息。

atop是一个较新的工具,功能非常强大。运行atop看起来与 类似top,但它有更多信息。当您想要日志时,atop -w <file>将改为写入二进制日志,可以使用atop -r <file>.该atop软件包还包括一项自动写入日志的服务,间隔时间为 10 分钟(默认情况下)。

更新:atop 2.4.0 增加了对 Linux 的支持压力失速信息。我希望这将有助于检测由于内存压力而导致的停顿。内存压力统计数据(如msmf中所示atop)可以检测交换和非交换抖动。从技术上讲,这意味着它无助于区分交换和非交换抖动:-)。但我很想知道这些信息。我没有太多确认抖动是我的问题......并且正如更新中所证明的那样,抖动实际上并不是主要问题。

关于我遇到的主要问题:我认为收集这方面的信息比较困难。有一种通用的跟踪方法可能会有所帮助:offcputime --state 2。虽然安装这个工具花了一些功夫。

之前的回答

我有atop安装了一个解决方法,可以在我将笔记本电脑挂起过夜时使其正常工作

atop如果您长期遇到内存消耗问题,来自服务的日志可能会提供非常丰富的信息。它可能会错过较短的问题(由于默认的 10 分钟记录间隔)。

  • 我的问题似乎持续了 10-20 分钟。
  • 交换使用量从之前示例中的 1.4G 上升至 2G (100%)。
  • 线程qemu-img本身在 RAM 中的大小并不大。该qemu-img进程只有 25M 驻留。
  • swout曾是175735。这是以 4096 字节的页面来衡量的,这意味着大约 0.7G 被换出。

同时,cache从0.8G增长到2.3G。 free内存停留在0.1G。

我怀疑 qemu-img 正在执行缓存 IO,缓存正在推出其他内存,这就是导致交换的原因。如果我没有交换空间,我预计仍然会出现一些问题;即加载的程序代码和其他缓存将被逐出。

如果我drop_caches然后是cp一个16G的文件,我可以触发相当多的交换。我认为同样的问题正在被重现cp;我不认为这仅限于某些具体细节qemu-img convert

相关内容