linux – 在正常运行30分钟后调用sync / fsync会降低IO速度

使用带有ext4 hybrid SSD的Ubuntu 14.04运行30分钟后,我看到很多进程使用iotop阻止了IO.

这种减速的根本原因可以追溯到Unix系统调用同步.

重复从终端运行同步可能需要1 – 2秒,但仅在30分钟正常运行时间.

为了证明这一点,我制作了一个脚本,可以在几秒钟内输出正常运行时间与执行同步所需的时间,并且每秒运行一次:

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分钟).

除了脚本之外,此时不应该写入磁盘,因此在第一次同步之后页面缓存中应该没有任何内容,每个后续同步将准确写入正在写入脚本的内容,大约100个字节或所以.

当我检查cat / proc / meminfo脏行(页面缓存中需要保存到磁盘的数据?)和写回行(HD磁盘缓冲区?)都为零时.我的想法是调用同步刷新这些磁盘缓存但它仍然冻结,即使这些缓存中没有任何东西,所以它还做了别的什么?

重新启动后此问题仍然存在;例如 – 如果我等待30分钟减速然后重新启动,那么减速仍将存在.如果我断电然后重新启动问题将消失,直到30分钟后.

一个好奇心是,当我检查上面的图表并放大了发生减速的区域时,我得到了这个:

波峰和波谷重复 – 从波谷到波谷每隔10秒发生一次.

我还在减速之前运行了hdparm测试(hdparm -t / dev / sda和hdparm -T / dev / sda):

/dev/sda:
Timing cached reads:   23778 MB in  2.00 seconds = 11900.64 MB/sec
/dev/sda:
Timing buffered disk reads: 318 MB in  3.01 seconds = 105.63 MB/sec

在减速期间:

/dev/sda:
 Timing cached reads:     2 MB in  2.24 seconds = 915.50 kB/sec
/dev/sda:
Timing buffered disk reads: 300 MB in  3.01 seconds =  99.54 MB/sec

显示实际的磁盘读取没有受到影响但是缓存读取是否意味着这与系统总线有关,而不是HD呢?

这是我尝试过的解决方案:

>更改HD的spindown设置(可能是HD进入省电模式?):

hdparm /dev/sda -S252 #(set it to 5 hours before spindown)

>将文件系统的日志记录类型更改为回写而不是订购,以便我们获得性能改进 – 这不能解决问题,因为它没有解释30分钟无法减速的正常运行时间,当我尝试这个没有变化时.
>禁用CRON,因为它似乎在30分钟后出现.
> cpu使用率很好,并且完全空闲,所以没有任何进程可以归咎于我,但是我已经尝试关闭包括会话管理器(lightdm)在内的每个服务,这没有任何作用,因为我认为问题是较低级别.
>分析在30分钟进入的任何新进程表明没有变化 – 我已经在前后差分输出PS,并且没有区别.

这仅在大约2周前开始发生,没有安装任何内容,并且在此期间没有进行任何更新.我认为这个问题的水平要低得多,所以我真的很感激一些帮助,因为我很无能为力,即使把我指向正确的方向也会有所帮助.

在相关磁盘上启用了写入缓存,我也尝试禁用写入障碍. HD上的SMART数据表明HD本身没有任何问题,但是我怀疑这是HD在重新启动后仍然存在的神秘感.

解决方法

这是因为有问题的驱动器启用了 SMART data.

禁用SMART数据解决了这个问题:

sudo smartctl --smart=off /dev/sda

有趣的是,为驱动器重新启用SMART数据并不能使问题返回,这表明SMART处于不一致状态(自检运行时可能发生崩溃?)并将其关闭然后再次重置该状态.

据推测,在磁盘旋转并进入循环后30分钟,它仍然会重新运行某种内部自检;因为这是在硬件层,计算机的其余部分没有意识到它正在进行,因此我看不到特别是负责IO阻塞的进程,也没有任何进程占用资源.

我会在尝试找出错误的同时运行SMART自检,但即使没有重置状态 – 它必须先关闭然后再显示.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


在Linux上编写运行C语言程序,经常会遇到程序崩溃、卡死等异常的情况。程序崩溃时最常见的就是程序运行终止,报告 Segmentation fault (core dumped) 错误。而程序卡死一般来源于代码逻辑的缺陷,导致了死循环、死锁等问题。总的来看,常见的程序异常问题一般可以分为 非法内存访
git使用小结很多人可能和我一样,起初对git是一无所知的。我也是因为一次偶然的机会接触到git,并被它强大的功能所蛰伏。git其实就是一种版本控制工具,就像svn一样,但是git是分布式的。我不想给git打广告,我们直入正题——git能帮我们做什么?1)源码版本控制。平常写一写demo程序可能和g
1. 操作系统环境、安装包准备 宿主机:Max OSX 10.10.5 虚拟机:Parallel Desktop 10.1.1 虚拟机操作系统:CentOS 7 x86_64 DVD 1511.iso Oracle:linux.x64_11gR2_database_1of2.zip linux.x6
因为业务系统需求,需要对web服务作nginx代理,在不断的尝试过程中,简单总结了一下常见的nginx代理配置。 1. 最简反向代理配置 在http节点下,使用upstream配置服务地址,使用server的location配置代理映射。 upstream my_server { server 10
Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核的目的。一直以来,对linux的模块机制都不够清晰,因此本文对内核模块的加载机制进行简单地分析。 模块的Hello World! 我们通过创建一个简单的模块进行测试。首先是源文件main.c和Makefile。 f...
一、Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个Master组件提供服务,其中正在使用的组件称为Active,另一个作为备份称为Standby,例如HDFS的NameNode、YARN 的ResourceManager。HDFS的web页面只有通过Active的Name
一个简单的通用Makefile实现Makefile是Linux下程序开发的自动化编译工具,一个好的Makefile应该准确的识别编译目标与源文件的依赖关系,并且有着高效的编译效率,即每次重新make时只需要处理那些修改过的文件即可。Makefile拥有很多复杂的功能,这里不可能也没必要一一介绍,为了
Linux内核源码分析方法一、内核源码之我见Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次。如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径。我们都知道,想成为优秀的程序员,需要大量的实践和代码的编写。编程固然重要,但是往往
题记:自从接触到“跳板机”的概念后,一直就被烦不胜烦的机器名,ip地址,用户名,密码折腾的死去活来,心说能有个小精灵随时帮我输入那些重复的登录信息就好了。我见过最挫的方式就是用记事本把一堆机器的ip、登录用户、密码记录下来,每次登录机器就像是一场战斗:打开笔记本 勾选复制 写ssh命令 登录 再打开
统计一下你写过多少代码最近整理了一下自己从开始学习编程以来写过的程序和代码,林林总总,花了不少的时间,最后把一些自认为还算不错的代码提交到github上做一个简单的分类和备份。当然我并不奢求它们能成为多好的开源代码,只是希望通过这种方式分享自己的劳动成果罢了。如果大家有兴趣可以访问我的github,
一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了。 一、设置hostname/fqdn
在Linux系统内设置hostname很简单,如: $ hostname florian 如果...
Linux的原子操作与同步机制 并发问题 现代操作系统支持多任务的并发,并发在提高计算资源利用率的同时也带来了资源竞争的问题。例如C语言语句“count++”在未经编译器优化时生成的汇编代码为。 当操作系统内存在多个进程同时执行这段代码时,就可能带来并发问题。 假设count变量初始值为0。进程1
最简git Server配置如何保持多台计算机的项目代码的同步更新呢?通过在一个公用计算机上开启git服务,任何能与该计算机互联的终端都可以同步最新的项目代码。每个终端所负责的就是下载代码更新,修改代码,提交代码更新,这些工作产生的变化能全部反应到git服务器上。同时,这么做也能避免使用github
建议收藏!!!Linux 服务器必备的安全设置~
QQ 用 Electron 重构后,终实现 Linux、macOS、Windows 三端架构统一!
Shell 分析日志文件高效命令,超级好用!
Linux下的Docker容器网络:如何设置容器间的网络连接和通信?
Linux 服务器必备的安全设置,建议收藏!!!
以为很熟悉 Linux,万万没想到在生产环境翻车了.....
Linux 或 Windows 上实现端口映射