![DU 为何会导致 CPU 使用率过高?](https://linux22.com/image/623615/DU%20%E4%B8%BA%E4%BD%95%E4%BC%9A%E5%AF%BC%E8%87%B4%20CPU%20%E4%BD%BF%E7%94%A8%E7%8E%87%E8%BF%87%E9%AB%98%EF%BC%9F.png)
在 CentOS 6.5 上,由于 /home 的磁盘使用计划而运行,但du -sk /home
导致CPU 使用率达到 100%。此外,在它完成之前,另一个 du 开始运行,并且堆积如山,使系统瘫痪。sh -c (du -sk \/home) 2>/dev/null
du
从那时起,我禁用了自动检查,但我du -sk /home
也无法手动运行。du
在其他目录上运行良好(快速)(尽管 /home 是最大的 - 4912620 - 它不应该花费那么长时间)
我想知道为什么 DU 会导致 /home 上的 CPU 使用率过高
更新 1:完全重启(主机+客户机)解决了该问题。
更新2:问题又回来了。du 运行时,CPU 使用率几乎一半一半地分布在 (us) 和 (sy) 之间。(wa) 从未超过 1%。此外,IOWAIT 显示仅磁盘写入?
答案1
我无法确切地告诉你原因,但我会采取以下措施来缩小发生的情况的范围:
cd /home
for i in * ; do echo "Starting in ${i}..." ; du -s ${i} ; done
这将对目录内的每个命令运行“du -s” /home
,并向您显示它将要执行的操作。这也假设您使用 sh 或 bash 作为 shell。
当您找到导致问题的目录后,再移入一个目录,看看那里发生了什么。还请记住,这不会在您启动 for 循环的级别检查隐藏(“点”)目录。您可能还需要检查这些目录,或者修改 glob 表达式以包含它们。
答案2
当我遇到这个帖子。
root> modprobe vhost_net root> echo vhost_net > /etc/modules
由于某种原因,virtio 接口之前没有加载驱动程序。现在一切都好了。