du命令花费的时间太长,无法运行


9

du -sh在各种目录中运行,以查找磁盘猪。我有两台相同的服务器(Dell PE2850),两者都使用RHEL5,du在一台服务器上运行的时间要比另一台服务器长得多。

例如,du -sh /opt/foobar在服务器A(其中有大约25 GB)上执行此操作将花费5分钟,而在服务器B上,具有相同数据量的同一命令将几乎立即报告给我。跑到顶部等时,我看不到任何明显的东西。

任何意见是极大的赞赏。


3
的速度du -s不取决于数据的大小,而是取决于文件的数量。两个目录树的文件数量是否相似?
Ladadadada

2
此外,du如果当前所有目录元数据(如文件大小)都已缓存,则工作速度会更快。如果由于某种原因在一台服务器上而不是另一台服务器上出现这种情况,则将导致很大的差异。
斯文

@Ladadada我会说是的,文件数量大致相同。即使添加星号以单独获取文件大小列表,也需要花费很长的时间才能滚动。但是我不确定如何验证元数据是否已缓存。
乔恩·温拉布

Answers:


6

如果该目录中有大量文件,并且目录的内容不断变化,则目录条目本身会随着时间的推移而分散。然后,当操作系统正在读取目录内容时,将会有很多不必要的磁盘搜索。尤其是在ext *文件系统(虽然ext4可能更好)和旧的ReiserFS v3.x文件系统(如果已满85%左右)的情况下,会发生这种情况。

解决方案非常简单:

cp -pr origdir newdir
mv origdir origdir.bak
mv newdir origdir

当然,如果所有内容都缓存在RAM中,那么没关系。通常,Linux会非常频繁地缓存经常访问的文件和目录。如果您确实想将这些目录的内容保留在RAM中,则可以将类似的内容放在ls -lah /your/dir 2>&1 >/dev/nullcron中。

编辑:哦,一件事突然浮现在我的脑海。如果您的服务器具有电池备份的RAID控制器,其中有一些缓存,请检查电池是否正常。我见过电池电量耗尽且控制器完全禁用缓存的情况,从而使性能非常糟糕。例如,HP服务器可能在iLO日志中告知有关控制器电池的信息;在实际的服务器运行状况仪表板中,一切似乎都正常且绿色,但是只有日志条目会告诉您这一点。


1
这可能需要花费一些时间,它在生产服务器上,因此我需要整夜进行操作,并且整个目录包含数百GB的数据,所以我不想将其停顿……我将报告明天早上第一件事。谢谢你的主意。
乔恩·温劳布

我仍在运行此命令,但不知道需要多长时间。我什至已注册它,并且cp仍在运行,自启动以来大约1小时15分钟。甚至在另一个shell中的那个文件夹上运行du都花了很长时间,但是您认为我应该只umount使用驱动器fsck而已?
乔恩·温劳布

除非它以某种方式困扰您的生产,否则就让它运行。使用RHEL5及其默认的CFQ I / O调度程序,您可以将cp命令放在空闲类中,这样它就不会欺负其他进程:ionice -c3 -p $(pidof cp)等等。
Janne Pikkarainen

还请阅读我的最新编辑。
Janne Pikkarainen

1
我知道已经有一段时间了,但是我终于可以执行您提到的cp命令了。复制25 GB需要两个两个小时。在进行了移动之后,运行另一个du -sh同样慢。实际上,即使删除备份目录也很慢!
乔恩·温拉布

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.