我在同一设备上运行一个 Web 服务器,并在 apache 中运行了几个 Web 应用程序。
有一天,我必须在一个包含超过 100 000 个文件的文件夹上运行 achown -R
和 a 。chmod -R
这花了一些时间,我意识到磁盘IO导致所有应用程序在很长一段时间内运行速度极慢。命令完成后的几分钟内,CPU 使用率也很高。
使用多个设备会减少磁盘 IO 阻塞吗?
如果我将每个应用程序放在不同的设备上,磁盘 IO 是否会以相同的方式影响服务器的整体性能?
磁盘 IO 阻塞是按磁盘划分还是按整个系统划分?
答案1
机械存储设备速度很慢,因为它们是机械的。 (其他非机械存储设备也可能很慢,但原因不同且方式不同。)机械磁盘上的每个 I/O 操作都需要固定的时间(寻道时间,以毫秒为单位)来定位磁盘上的位置,加上传输数据的可变时间(通常在 40 到 200 MiB/秒之间,具体取决于磁盘的特性)。当执行许多小操作时,寻道时间占主导地位;单个旋转磁盘每秒只能进行数百次 I/O 操作 (IOPS) - 昂贵的 15 kRPM SAS 磁盘可实现约 200 IOPS,常规 7.2 kRPM SATA 磁盘可实现 100 IOPS,而小型廉价的 5.4 kRPM磁盘大约为70。
使用多个磁盘可能会有所帮助——前提是 I/O 操作分布在可用磁盘中。在可用磁盘之间分配 I/O 操作可以通过适当的软件或硬件配置自动执行。使用专用硬件,例如通过连接的存储阵列存储区域网络企业级应用首选;对于私人用途,常见的方法是使用软件袭击;一个好的起点是Linux磁盘阵列维基百科。 RAID 可以提高吞吐量和/或可靠性;如果目标是提高吞吐量,那么您应该考虑带条带化的 RAID 级别,例如 RAID 0 和 RAID 10。
答案2
我认为问题在于大多数文件系统不能很好地支持这么多文件。
所以尽量不要在一个目录下有那么多文件,而是分成子目录。
当您执行缓慢的操作时,您可以nice/renice
这样做chmod
,以免它对网络服务器造成太大干扰。但正如我在第一段中所写,这是许多文件的问题,因此过多的锁定和内核模式下的时间,这并不能真正解决。
拥有其他设备可能会有所帮助,但恕我直言,由于目录巨大,真正的 IO 并不比内核操作那么多。
[注意:移动超大文件不会导致速度减慢,因此不仅仅是 I/O 问题]