我想弄清楚为什么我的机器上疯了。 这是一个带有内存负载的8核心盒子。 它有~50%的CPU负载。
iotop似乎没有指向任何特定的进程 – 在这里和那里写一些突发(主要是cron开始,一些监控统计生成等)。当我使用sys/vm/block_dump
收集写统计,我得到列表喜欢这个:
kjournald(1352): 1909 sendmail(28934): 13 cron(28910): 12 cron(28912): 11 munin-node(29015): 3 cron(28913): 3 check_asterisk_(28917): 3 sh(28917): 2 munin-node(29022): 2 munin-node(29021): 2
在哪里被录制的动作只是WRITE。
为什么会这样呢? 我还应该看些什么来限制活跃的活动? 实际上写什么似乎不成比例。
kjournald
负责ext3(日志文件系统)的日志。 众所周知,在一定的负载下使用大量的CPU。 除了使用另一个文件系统或禁用日志logging(有效地使fs ext2),没有太多的事情要做。
理论上,您可以使用ext3日志logging的其他模式之一,并检查CPU使用率是否下降,但请记住,每种方法都会影响正在写入磁盘的数据的安全性。 您已经订购了模式,回写模式和“全部”模式。
在安装系统时,使用选项data=
来设置模式,如data=ordered
。
默认情况下,你的ext3文件系统将被打开。 每次读取/访问文件或目录时,文件系统将不得不回写磁盘来更新此时间logging。 这意味着,即使您的工作量大部分是基于读取的,您仍然需要点击磁盘来更新每个文件和目录的访问时间,这是我猜测为什么您的kjournald
过程正在写入这么多的块。
closures一段时间会大大提高性能,但会破坏POSIX合规性。 看看这篇维基百科文章 ,讨论围绕atime的批评。
要closures一次,只需添加noatime
到您的文件系统的挂载选项,或者您可以重新挂载由poigebuild议。 以下是根文件系统的例子:
mount -o remount,noatime /
如果数据的完整性不重要,请执行此操作
iostat -o -a
确保它真的被logging下来。 这是什么导致我的服务器崩溃。
改变硬盘驱动器将工作。
当你看到你写的5-10MB的数据
http://ubuntuforums.org/showthread.php?t=56621
sudo tune2fs -O ^has_journal /dev/sda1 sudo e2fsck /dev/sda1
其中sda1是您的分区的名称
报告结果在评论中,以便我可以进一步检查。
不是为了做,只是提及:
mount -oremount,noatime /fs/being_over/journaled
– 作为一个快速猜测镜头(你没有告诉我们你的mount
看起来像什么) tune2fs -J …
)