几个月后ZFS的极端减慢


8

我有一个通用服务器,可以为许多用户提供邮件,DNS,Web,数据库和其他一些服务。

它具有3.40 GHz的Xeon E3-1275、16 GB ECC RAM。运行Linux内核4.2.3,以及Linux上的ZFS 0.6.5.3。

磁盘布局是2个Seagate ST32000641AS 2 TB驱动器和1个Samsung 840 Pro 256 GB SSD

我在RAID-1镜像中拥有2个HD,而SSD充当了缓存和日志设备,全部在ZFS中进行管理。

当我第一次设置系统时,它的速度非常快。没有真正的基准,只是...快速。

现在,我注意到速度极慢,特别是在保存所有maildirs的文件系统上。对于仅46 GB的邮件,每晚进行备份需要90分钟以上。有时,备份会导致极高的负载,以至于系统长达6个小时几乎无响应。

在这些减速期间,我已经运行zpool iostat zroot(我的池名为zroot),并且看到的写入速度为100-200kbytes / sec。没有明显的IO错误,磁盘似乎并没有特别用力,但是读取速度却几乎无法使用。

奇怪的是,我在运行FreeBSD的另一台机器上拥有完全相同的体验,但使用的是类似规格的硬件,尽管没有SSD。它工作了好几个月,然后以相同的方式变慢了。

我一直怀疑:我使用zfs-auto-snapshot来创建每个文件系统的滚动快照。它会创建15分钟,每小时,每天和每月的快照,并保留一定数量的快照,并删除最旧的快照。这意味着随着时间的推移,每个文件系统上已经创建并销毁了数千个快照。这是我可以想到的唯一持续进行的文件系统级操作,具有累积作用。我尝试销毁所有快照(但保持进程运行,创建新快照),但没有发现任何变化。

不断创建和销毁快照是否存在问题?我发现拥有它们是一个非常有价值的工具,并且导致人们相信它们(除了磁盘空间之外)或多或少为零成本。

还有其他可能导致此问题的原因吗?

编辑:命令输出

输出zpool list

NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
zroot  1.81T   282G  1.54T         -    22%    15%  1.00x  ONLINE  -

输出zfs list

NAME             USED  AVAIL  REFER  MOUNTPOINT
zroot            282G  1.48T  3.55G  /
zroot/abs       18.4M  1.48T  18.4M  /var/abs
zroot/bkup      6.33G  1.48T  1.07G  /bkup
zroot/home       126G  1.48T   121G  /home
zroot/incoming  43.1G  1.48T  38.4G  /incoming
zroot/mail      49.1G  1.48T  45.3G  /mail
zroot/mailman   2.01G  1.48T  1.66G  /var/lib/mailman
zroot/moin       180M  1.48T   113M  /usr/share/moin
zroot/mysql     21.7G  1.48T  16.1G  /var/lib/mysql
zroot/postgres  9.11G  1.48T  1.06G  /var/lib/postgres
zroot/site       126M  1.48T   125M  /site
zroot/var       17.6G  1.48T  2.97G  legacy

通常,这不是一个非常繁忙的系统。下图的峰值是夜间备份:

IO统计

我已经设法在系统减速期间(今天早上8点左右开始)捕获了系统。某些操作的响应速度相当快,但平均负载当前为145,并且zpool list只是挂起。图形:

/ dev / sdb延迟


请显示zpool listzfs list
ewwhite

您的游泳池是否已满80%?那可能会引起问题。
Ryan Babchishin

哦,不... Linux上的ZFS根目录。嗯......你有没有做过任何调整?另外,您可能正在遭受支离破碎的困扰。您的ZoL版本是什么?你有没有更新?
ewwhite

如果我没看错,zpool的版本为28,zfs的版本为5。不是接近80%已满(更像是16%已满?)。ZoL是最新的0.6.5.3。
高岭土大火

有人还建议固态硬盘在大量用作日志的情况下可能会发生故障,但我认为SMART表示运行良好。Reallocated_Sector_Ct 0,Wear_Leveling_Count原始值为402(且值为88),没有错误...
Kaolin Fire

Answers:


1

查看arc_meta_used和arc_meta_limit。对于许多小文件,您可以在ram中填充元数据缓存,因此它必须在磁盘上查看文件信息,并可能使爬网速度变慢。

我不确定如何在Linux上执行此操作,我的经验是在FreeBSD上。


有趣-谢谢!添加github.com/zfsonlinux/zfs/issues/1261供参考。混乱的根目录:〜#cat / proc / spl / kstat / zfs / arcstats | grep arc_meta_used arc_meta_used 4 5895985776混沌根目录:〜#cat / proc / spl / kstat / zfs / arcstats | grep arc_meta_limit arc_meta_limit 4 6301327872
高岭土大火

但是,从磁盘IO速率来看,似乎实际上并没有太多物理磁盘活动。
squidpickles
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.