如何找出导致我的机器冻结的原因?

如何找出导致我的机器冻结的原因?

我在这台机器上运行 Arch:

3.40GHz i7 六核 (4930K)

16GB DDR3 1600MHz 内存

Raid0 中的 2xSamsung 840 EVO SSD(使用 BTRFS raid)

当我在带有几个虚拟机(2 或 3 个)的 Arch 上运行 VMware 时,每个虚拟机大约有 2-4 个内核,每个虚拟机有 2GB RAM,我的系统开始出现随机冻结。每隔几分钟,系统就会冻结 10 到 30 秒,然后再次开始移动,30 秒后又冻结,直到我关闭虚拟机。当系统死机时,鼠标仍然可以正常移动,但主机上的应用程序停止响应 - vmware 不响应,firefox(也在主机上打开)不响应等。

当冻结发生时,如果我运行进程监视器,它确实会显示 vmware 已耗尽多个核心,但同时还有其他未使用的核心。我的 RAM 也绰绰有余 - 虚拟机总共使用了 6GB,主机还剩 10GB。我的交换空间为 0,因此交换不会减慢任何速度。

有报告称,由于 btrfs 会导致文件系统级别的文件碎片,因此虚拟机可能运行缓慢。然而,据我所知,碎片只是传统硬盘上的一个问题 - SSD 没有寻道的读磁头,因此它们不关心文件是否存在高度碎片。

当我运行 Debian 7 时,这种情况从未发生过,所以我很确定这不是硬件问题。

我可以运行哪些工具来找出系统不断冻结的原因?我尝试过 top/htop 和 iotop (当系统冻结时,没有任何内容过度写入或读取)。似乎没有任何类型的活动监视器可以让 btrfs 判断它在写入/读取任何内容时是否遇到问题。还有什么我可以尝试的吗?

答案1

来自 btrfs陷阱页面:

具有大量随机写入的文件可能会变得严重碎片化(超过 10000 个范围),导致 HDD 损坏,并在具有 SSD 或大量 RAM 的系统上导致 CPU 负载出现过多的多秒峰值。

  • 在服务器和工作站上,这会影响数据库和虚拟机映像。

    • nodatacow 安装选项可能在这里有用,并有相关的陷阱。

    ...

  • 症状包括 btrfs-transacti 和 btrfs-endio-wri 占用大量 CPU 时间(出现峰值,可能由同步触发)。您可以使用 filefrag 来定位碎片较多的文件(压缩时可能无法正常工作)。

我在 Virtualbox 中遇到了与您描述的类似的问题。 btrfs选项nodatacow对我的系统没有明显帮助。我也尝试了自动碎片整理选项(作为桌面环境中应用程序数据库的可能解决方案提到),也没有得到使该行为可接受的结果。

最后,我缩小了 btrfs 分区及其所在的逻辑卷,创建了一个新的 LV 并将其格式化为 ext4,然后将我拥有的 VM 磁盘映像 (VirtualBox) 放在该“分区”上。

答案2

通过不在分区上使用 LUKS,问题得到了彻底解决。所以我直接使用 BTRFS 格式化分区,而不是先使用 LUKS。

还安装了以下参数:

/dev/sda2 /           btrfs       rw,noatime,space_cache,compress=lzo,ssd,discard,autodefrag,commit=0,thread_pool=8 0 0

相关糟糕的通用 dm-crypt (LUKS) 写入性能

答案3

这可能是一个透明的大页问题,其中内核线程胡格佩吉德,实际上是挖掘 RAM 以对其进行碎片整理或从 4k 个页面中创建大页面。

鉴于您的系统 RAM 量相当大,内核可能决定启用大页面。

检查这两个内核可调参数的内容:

/sys/kernel/mm/transparent_hugepage/enabled
/sys/kernel/mm/transparent_hugepage/defrag

如果它们的内容是always,您可以更改never,并查看 cpu 峰值/冻结是否消失。

相关内容