为网络服务器解释 /proc/diskstats:写入多于读取?

Dr.*_*ini 0 linux storage

感谢这个答案,我能够看到我的 apache 网络服务器的总读取+写入:

[root@barricade ~]# cat /proc/diskstats | grep  sda
   8       0 sda 653416 315344 72474412 17441745 4597621 15680121 156902978 282408636 0 80171663 299835582
   8       1 sda1 595 245 4696 528 3 0 18 0 0 527 527
   8       2 sda2 652661 315089 72468356 17440939 3932716 15680121 156902960 236353355 0 49417302 253779925
Run Code Online (Sandbox Code Playgroud)

如果我正确解释了这个数字,磁盘已经完成了 653.416 次读取和 4.597.621 次写入?!?这个网络服务器基本上提供 HTML 页面 (PHP+MySQL) 不可能产生比读取更多的写入?

我有什么误解?

编辑:iostat 似乎证实了这一点......仍然,我很困惑......

[root@barricade ~]# iostat
Linux 2.6.32-431.20.3.el6.x86_64 (barricade.zane.it)    08/08/2014      _x86_64_        (4 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
       3,45    0,00    0,82    2,58    0,00   93,15

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               5,29        72,99       158,06   72474540  156951762
dm-0             13,36         7,07       104,99    7018170  104254024
dm-1              0,35         1,84         0,96    1828536     956040
dm-2              7,03        64,07        52,11   63621098   51741680
Run Code Online (Sandbox Code Playgroud)

Dan*_*son 5

/proc/diskstats 的内容,以及 'iostat' 本身的输出,都显示了自计数器重置(可能是机器启动后)以来的累积统计信息。

如果您的网络服务器主要提供 HTML 和简单的 SQL,则很可能它主要来自内存缓存,因此很少访问磁盘进行读取。另一方面,记录的所有内容(例如每个 HTTP 页面访问,以及许多其他事情)都会产生写入磁盘的活动。

因此,如果所提供的内容很简单,那么您的系统自启动以来执行的写入活动多于读取活动并不是没有道理的。

  • 如果您没有为挂载设置 `noatime` 或 `relatime`,这甚至会被放大,因为这基本上意味着即使对于从缓存中读取的每个文件(无磁盘读取操作),您最终也会执行写入操作无论如何都要更新 `atime` 属性。但是在基于 RHEL6 的系统上,这应该是默认设置的。 (3认同)