我在一台装有 CentOS 6.5 和 QDR Infiniband 网络上的 NAS NFS 的 Linux 服务器上工作。我正在运行一个bash
脚本,该脚本基本上会创建一个目录,在其中创建符号链接,并将cat
一个小文件放到每个目录中。它对几百个目录执行此操作。
我在输出日志中注意到,其中一个符号链接和后续符号链接cat
无法运行,并声称磁盘已满。但事实显然并非如此。对几千个目录运行同一个脚本后,我开始收到大量此类消息。我检查后发现磁盘似乎已满,因此我立即终止了脚本,但几分钟后,磁盘又恢复正常。
下面是df
我看到的顺序命令,第一个命令是在脚本运行时执行的,第二个命令是在脚本终止之后执行的,第三个命令是在几秒后/home3
(NAS)执行的,这就是我正在处理的命令:
[swfl 07:40:56 JPM]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_misisss6-lv_root 135G 25G 104G 19% /
tmpfs 12G 0 12G 0% /dev/shm
/dev/sda1 485M 69M 392M 15% /boot
misisss-nasib3:/home 26T 26T 1.0M 100% /home3
misisss-nas1:/shared 77G 437M 73G 1% /shared
misisss-nasib2:/home 15T 15T 95G 100% /home2
You have new mail in /var/spool/mail/swfl
[swfl 07:41:39 JPM]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_misisss6-lv_root 135G 25G 104G 19% /
tmpfs 12G 0 12G 0% /dev/shm
/dev/sda1 485M 69M 392M 15% /boot
misisss-nasib3:/home 26T 26T 1.0M 100% /home3
misisss-nas1:/shared 77G 437M 73G 1% /shared
misisss-nasib2:/home 15T 15T 94G 100% /home2
[swfl 07:41:58 JPM]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_misisss6-lv_root 135G 25G 104G 19% /
tmpfs 12G 0 12G 0% /dev/shm
/dev/sda1 485M 69M 392M 15% /boot
misisss-nasib3:/home 26T 21T 4.2T 84% /home3
misisss-nas1:/shared 77G 437M 73G 1% /shared
misisss-nasib2:/home 15T 15T 93G 100% /home2
当时,大多数核心的 CPU 使用率相对较低,磁盘使用率也处于低到中等水平。我没有运行监控软件,因此无法提供 IOps 数据或任何类似数据,但我做过类似但强度高得多的工作,没有出现问题。
简而言之,很难相信我所做的工作会压倒系统的任何部分。面包屑在哪里搜索问题?
更新 1运行watch 'df -h; df -i'
跟踪 inode 和磁盘使用情况时,我可以看到磁盘空间急剧下降(大约 5 秒内一切正常,然后几 TB 在 10-20 秒内消失),直到我开始出现错误,但 odes 并没有下降那么多。
不过,我可以看到 odes 的利用率确实相当高(30-70%)。我有大约 160 亿个 inode,正在创建大约 40000 个文件/目录。在我终止该进程后,磁盘空间将开始缓慢攀升(几 GB),持续 10-20 秒,然后又会回升几 TB,回到原来的水平。
答案1
通过观察磁盘空间在 5 分钟的周期内释放的情况,我们能够识别问题所在。这可能是我们使用的文件系统所特有的行为,XFS 文件系统。
XFS 允许您指定预分配的文件大小。我们使用 挂载了文件系统allocsize=1G
,因为这个文件系统是为大文件构建的,我们希望避免碎片化。您还可以为文件系统指定更新频率,然后返回并根据预分配的值修改利用率。默认值为 5 分钟,这就是我们看到这种周期性行为的原因。可以找到有关此行为的一些相关信息这里。
因此,当我创建一个文件,然后对它执行操作时cat
,对该文件的第二个操作足以触发系统为该文件预分配 1 GB。以极高的速度循环处理数千个这样的文件,导致在存储单元调整这些分配之前,所有磁盘空间似乎都已耗尽。
我们已经删除了该挂载选项,以允许文件系统采用动态预分配,这对于较小的文件和文件系统可用容量更加智能。