高的linux服务器负载

当存在大量networkingstream量时,我有一个高服务器负载(平均负载从10到100+)的问题。 读/写文件时也有明显的延迟。 机器是一个Apache Web服务器。 网页正在使用PHP,正在访问/打开一些小(最大30kB)文件(configuration,黑名单,文件从caching目录)。

我试图追溯这个问题的几天现在。 这是我发现的:

  • CPU负载低于10%
  • 负载被长磁盘响应所驱动。 top显示在20-100%的%wa参数(iowait)
  • iostat: pastebin
  • 经过一些testing,似乎问题是一个,PHP脚本中的特定fopen()函数,访问caching文件
  • 如果我用这个特定的fopen()删除行,服务器负载快速下降到0.00-0.50,iowait是0%

有关服务器的一些信息:

  • xeon e3-1245v2,32 gb ram,2x 2TB SATA3硬盘,带有软件RAID 1(镜像),文件系统ext4(启用了dir-indexnoatime在fstab中)
  • caching目录大小约为500GB
    • 它有大约16-17万个文件,每个20-30KB
    • 文件名是MD5散列
    • 目录结构是(举例): cacheDir/d4/1d/d41d8cd98f00b204e9800998ecf8427e.dat
    • 所以cacheDir/ (1st级)有256个目录,每个1st级目录有256个二级目录,
    • 所以平均每个二级目录大约有200-300个文件
  • PHP fopen具有绝对path的caching文件
  • 磁盘被检查:没有错误/警告
  • e2fsck -Df (优化文件系统中的目录)结果在这里
  • e2fsck -Df之后,服务器负载没有差别

我认为,这样的caching目录组织对于最佳的磁盘性能是有利的。 显然我错了..

你会build议什么来解决这个高负载/慢磁盘响应问题?