我们有一个集中的文件caching,一组Web服务器用来存储“重量级”页面。 每个networking服务器都使用Samba来挂载这个共享区域。
我们在服务器上获得了很多iowait,我想知道我们可以采取哪些步骤来创build更高效的集中caching? 我们已经在使用memcache作为一些对象的第一线caching,并且可能只是抛出更多的内存,但是我很有兴趣找出我们可以使用哪些技术来加速基于文件的caching。 所有的服务器运行Ubuntu的最新版本。
服务器使用带有LVM的ext3文件系统。 也许其他文件系统可以更好地执行这种活动? 我们多年来一直使用Samba,因为每个人都对此感到满意,而且我们遇到了NFS的维护问题(例如拒绝卸载)。 也许有更好的技术…
检查分配给该卷的io调度程序(称为内核文档中的io电梯)。
$ cat /sys/block/sda/queue/scheduler noop anticipatory [deadline] cfq
对于大多数RedHat和Fedora发行版来说,默认的是CFQ调度器。 恕我直言,这不是一个iobound服务器进程最好的。 我build议截止日程安排程序
$ echo "deadline" > /sys/block/sda/queue/scheduler
改变这个,或者添加
elevator=deadline
到你的启动参数来使这永久。
艾奥瓦时间也可能由积极的预读引起,这对您的工作量来说可能是不必要的。 RedHat和Fedora系统的默认值是128k
$ cat /sys/block/sda/queue/read_ahead_kb 128
尝试使用较低的值回显该文件,看看是否会减less您的iowait时间。
另外,检查底层磁盘或arrays。 如果它降级或重build,你的iowait时间将会随着底层磁盘子系统窃取io带宽而重build
服务器上的高IOWait%意味着您需要更快的磁盘/更多内存来存放磁盘caching。
看看你的“iostat -x 5”统计数据 – 你是否在磁盘饱和? 根据您的应用程序语义,文件服务器上的更多内存可能会很好。
如果服务器存储和检索页面之间存在很长的延迟,则需要更快的磁盘。
检查空闲的输出,看看你有多less内存以及它被用于什么。
由于Samba是通过networking访问的,我认为你的networking首先是瓶颈。 链接是否围绕networking中文件/数据包的types和大小进行了优化?
你可以监视链接,看看他们是如何利用?
如果networking似乎不是瓶颈,那么可以看一下本指南中的一些技巧来优化您的Sambaconfiguration。
编辑
你提到LVM,它们是什么types的磁盘? 定期下架7200RPM IDE驱动器? 如果是真正的IO等待,那么是的,你需要更快的磁盘。 这可能像SATA 10K驱动器一样简单,甚至可能进入高性能RAID。
另一种select是使用反向代理caching解决scheme(如Squid或varnish),而不必通过不同的层来获取相同的数据。 只要考虑这样一个解决scheme就可以优化服务网页(而不是一个更通用的文件服务解决scheme)。