服务器 Gind.cn

服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器

调用sync / fsync会在30分钟的正常运行时间后减慢IO

使用Ubuntu 14.04和ext4 混合SSD 30分钟的正常运行时间后,我看到很多使用iotop阻止IO的进程。 这种放缓的根本原因已经追溯到Unix系统调用sync 。 从terminal重复运行sync可能需要1 – 2秒的时间,但只能在正常运行30分钟后进行。 为了certificate这一点,我制作了一个脚本,可以在几秒钟内输出正常运行所需的时间,然后每秒钟运行一次: while true; do cat /proc/uptime | awk '{printf "%f ",$1}'; /usr/bin/time -f '%e' sync; sleep 1; done; 我运行了上面的脚本,等待了大约一个小时(系统闲置),并将结果绘制在gnuplot中(y =执行同步的时间,x =正常运行的秒数): 图上的时间点大概是1780(1780/60 =大概30分钟)。 除了脚本以外,现在除了脚本以外,什么都不应该写入磁盘,因此在第一次同步之后,页面caching中应该几乎没有任何内容,随后的每个同步将写入正在写入脚本的内容,大致为100个字节,所以。 当我检查cat /proc/meminfo脏行(页caching中的数据需要保存到磁盘?)和回写行(HD磁盘缓冲区?)都为零。 我的想法是调用sync刷新这些磁盘caching,但即使这些caching中没有任何内容,它仍然冻结,所以它做了别的什么? 重新启动后,此问题仍然存在; 例如 – 如果我等待30分钟,然后重新启动,减速将仍然在那里。 如果我关机然后重新启动问题消失,直到30分钟后。 另一个好奇心是,当我检查上面的图表,放大发生放缓的地区时,我得到了这个: 波峰和波谷重复 – 每隔10秒从波谷到波谷发生。 在减速之前,我也运行了hdparmtesting( hdparm -t /dev/sda和hdparm -T /dev/sda ): /dev/sda: Timing cached […]