这是困扰了我很长一段时间,我真的希望有人能帮我。
我将保持简短:我拥有一个文件服务器(2个双核Xeon 2.0,8GB内存,132个SCSI硬盘),可以承载数千个小图像文件,4-10kb,每秒钟可以处理超过1000个请求。
我已经尝试了Apache,Nginx和Lighttpd,并发现Lighttpd是最适合这项工作的。
当Web服务器closures时,一个简单的高清基准testing表明它可以以大约170兆字节/秒的速度读取。 但是,当networking服务器打开并且服务大约30兆字节/秒时,这个非常相同的高清基准testing表明,高清可以以仅仅5兆字节/秒的速度读取,而不是140(170减去30)兆字节/秒,我会期待。
现在,即使在1000个请求/秒的时间内,CPU也能正常工作(负载低于1),并且有足够的空闲内存,这使我相信瓶颈实际上就是HD。
所以,我的问题是,为什么? 为什么当通过networking服务器提供服务时,可以读取的HD只有每秒30兆字节/秒的170兆字节/秒的瓶颈?
我的第一个猜测是,立即寻找并提供数千个文件完全杀死了HD的性能,而不是像这些基准testing一样只是一次读取/写入一个文件。
那是对的吗? 如果是这样,我该如何解决呢? 袭击? 更多HDs? 固态硬盘?
提前致谢!
这确实听起来像是在饱和磁盘的I / Ofunction。 一个15K RPM磁盘每秒可以处理大约170次I / O完全随机的I / O操作。 当在RAID0,RAID1或RAID10arrays中使用时,根据arrays中驱动器的数量,此I / O操作数是可加的(R5和R6引入另一个瓶颈,因此真实吞吐量可能会从理论上降低)。 如果你有96个驱动器在那里,你的理论最大值是大约16K I / O操作,秒。
除此之外:现在甚至可以把它比作中档的固态硬盘,在一台设备上可以处理30K I / O Ops /秒。
即使文件系统可能有4kb的块大小,该HD可能已经足够大以具有512b的扇区大小。 所以你将在你的I / O中得到一些4-10kb文件的顺序性。 即使如此,每秒钟有1000个并发请求听起来像是真正饱和单个磁盘。 事实上,你在繁忙时期的基准testing显示微不足道的5MB /秒告诉我,你正在饱和磁盘。
如果您的数据集足够小,单个SSD(或R1镜像中的一对)速度将足够快,无需增加caching的RAM。 如果这个“132 SCSI HD”实际上是“132GB SCSI HD”,那么你就进入了“价格适中”的SSD价格区间。
你的问题确实很可能是寻求开销。 有两个主要的解决scheme:
RAID10,RAID1或RAID0(危险:丢失一个驱动器会终止arrays)可以帮助将读取访问分割到多个硬盘驱动器,从而提高平均访问时间,但这只是Nx的改进(其中N是正在使用的驱动器数量) ,所以添加RAM应该被认为是可取的。