这是困扰我很长时间的事情,我真的希望有人能帮助我。
我将保持它的简短和简单:我有一个文件服务器(2x双核Xeon2.0,8GB RAM,132 SCSI ),它承载了数千个小型图像文件,4-10 up,每秒处理1000+请求。
我试过Apache、Nginx和Lighttpd,发现Lighttpd最适合这项工作。
当web服务器关闭时,一个简单的HD基准测试显示,它可以以170兆/秒的速度读取。然而,当网络服务器打开并提供大约30兆字节/秒的服务时,这个相同的高清基准显示,HD的读取速度仅为5兆/秒,而不是像我这样的虚拟人所期望的140兆/秒(170 - 30)兆字节/秒。
现在,即使是1000个请求/秒,CPU也做得很好(负载低于1),并且有足够的空闲内存,这使我相信瓶颈实际上是HD。
所以,我的问题是,为什么?为什么当通过web服务器提供数据时,能够以170兆/秒的速度读取瓶颈的HD仅为30 web/秒?
我的第一个猜测是,一次查找和处理数千个文件完全破坏了HD的性能,而不是像那些基准测试那样一次只读/写一个文件。
对吗?如果是的话,我如何解决这个问题呢?突袭?更多的HDs?SSD?
提前感谢!
发布于 2011-07-09 02:51:53
这听起来确实像是在饱和磁盘的I/O功能。一个15K的RPM磁盘每秒可以执行大约170 disk /O完全随机的I/O操作。当在RAID0、RAID1或RAID10数组中使用时,I/ op计数是基于数组中的驱动器数量的加法(R5和R6引入了另一个瓶颈,因此真正的吞吐量可能会从理论上降低)。如果你有96个驱动器在那里,你的理论最大值大约是16K I/O操作,秒。
旁白:把它与现在甚至中等范围的SSD进行比较,SSD可以在一个设备上处理30K的I/O操作/秒。
尽管文件系统可能有4kb的块大小,但HD可能已经足够老到有512 b扇区大小了。所以你会得到一些顺序在你的I/O为所有4-10 of的文件。即便如此,每秒1000个并发请求听起来确实会使单个磁盘饱和。您在繁忙时间进行基准测试的事实表明,5MB/s的内存不足,这一事实告诉我,您正在对磁盘进行饱和。
如果您的数据集足够小,那么单个SSD (或R1镜像中的一对SSD)将足够快,无需为缓存增加内存。如果"132 SCSI HD“实际上是”132 If HD",那么您就进入了‘多少可以负担’的SSD价格范围。
发布于 2011-07-09 01:52:46
你的问题确实很可能是寻找开销。有两个主要的解决办法:
RAID10、RAID1或RAID0 (危险:丢失一个驱动器会杀死数组)可以帮助将读取访问划分为多个硬盘驱动器,从而提高平均访问时间,但这只是Nx的改进(N是正在使用的驱动器数量),因此应该考虑添加RAM。
https://serverfault.com/questions/288528
复制相似问题