我们有一个集中的文件缓存,一组 Web 服务器使用它来存储“重量级”页面。每个网络服务器都使用 Samba 来挂载这个共享区域。
我们在服务器上有很多 iowait,我想知道我们可以采取哪些步骤来制作更有效的集中式缓存?我们已经将 memcache 用作某些对象的第一行缓存,并且可能只是为此投入更多内存,但我很想找出我们可以使用哪些技术来加速基于文件的缓存。所有服务器都运行最新版本的 Ubuntu。
服务器使用带有 LVM 的 ext3 文件系统。也许其他文件系统对于这种活动会更有性能?我们使用 Samba 多年只是因为每个人都对它感到满意,而且我们对 NFS 的维护感到头疼(例如,拒绝卸载)。也许有更好的技术...
检查分配给该卷的 io 调度程序(在内核文档中称为 io 电梯)。
对于大多数 RedHat 和 Fedora 发行版,默认设置是 CFQ 调度程序。恕我直言,这不是 iobound 服务器进程的最佳选择。我推荐截止日期调度程序
改变这一点,或添加
到您的引导参数,以使其永久化。
高 iowait 时间也可能是由激进的预读引起的,这对于您的工作负载来说可能是不必要的。RedHat 和 Fedora 系统的默认值是 128k
尝试将较低的值回显到该文件,看看是否会减少您的 iowait 时间。
此外,检查底层磁盘或阵列。如果它被降级或重建,您的 iowait 时间将飙升,因为底层磁盘子系统在重建自身时窃取 io 带宽
服务器上的高 IOWait% 意味着您需要更快的磁盘/更多的内存用于磁盘缓存。
看看你的 'iostat -x 5' 统计数据——你的磁盘饱和了吗?根据您的应用程序语义,文件服务器上的更多内存可能对您有好处。
如果服务器存储和检索页面之间存在很长的延迟,那么您需要更快的磁盘。
检查 free 的输出,看看你有多少内存以及它的用途。
由于 Samba 是通过网络访问的,我认为您的网络首先是瓶颈。链接是否围绕通过网络传输的文件/数据包的类型和大小进行了优化?
您可以监控链接以查看它们的利用率吗?
如果网络似乎不是瓶颈,那么您可以查看本指南中的一些技巧来优化您的 Samba 配置。
编辑
你提到LVM,它们是什么类型的磁盘?常规现成的 7200RPM IDE 驱动器?如果它是真正的 IO 等待,那么是的,你需要更快的磁盘。这可以像 SATA 10k 驱动器一样简单,甚至可以进入高性能 RAID。
另一种选择是使用像 Squid 或 varnish 这样的反向代理缓存解决方案,而不必通过不同的层来获取相同的数据。只是需要考虑的事情是这样的解决方案将针对提供网页进行优化(与更通用的文件服务解决方案相反)。