我有一个通用服务器,可以为许多用户提供邮件,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
通常,这不是一个非常繁忙的系统。下图的峰值是夜间备份:
我已经设法在系统减速期间(今天早上8点左右开始)捕获了系统。某些操作的响应速度相当快,但平均负载当前为145,并且zpool list
只是挂起。图形:
zpool list
和zfs list
。