Linux 服务器负载过高

Linux 服务器负载过高

当网络流量很大时,我遇到了服务器负载过高的问题(平均负载从 10 到 100+)。读取/写入文件时也会出现明显的延迟。机器是 Apache 网络服务器。网页使用 PHP 并访问/​​打开一些小文件(最大 30kB)(配置、黑名单、缓存目录中的文件)。

这几天我一直在尝试追查这个问题的根源。以下是我发现的:

  • CPU 负载低于 10%
  • 负载是由长磁盘响应引起的。top显示%wa参数(iowait)为20-100%
  • iostat:粘贴箱
  • 经过一些测试后,问题似乎出在我的 PHP 脚本中的一个特定的 fopen() 函数上,该函数访问了缓存文件
  • 如果我删除包含此特定 fopen() 的行,服务器负载将快速下降,降至 0.00-0.50 值,iowait 为 0%

有关服务器的一些信息:

  • xeon e3-1245v2、32 GB RAM、2 个 2TB SATA3 驱动器(带软件 RAID 1(镜像)、文件系统 ext4(dir-index已启用并noatime位于 fstab 中)
  • 缓存目录大小约为 500GB
    • 它有大约 1600-1700 万个文件,每个文件 20-30KB
    • 文件名是 MD5 哈希值
    • 目录结构为(示例):cacheDir/d4/1d/d41d8cd98f00b204e9800998ecf8427e.dat
    • 因此,第一级目录中有 256 个目录cacheDir/,每个第一级目录中有 256 个第二级目录
    • 因此,平均每个二级目录大约有 200-300 个文件
  • PHP 正在fopen使用绝对路径缓存文件
  • 检查磁盘:无错误/警告
  • e2fsck -Df(优化文件系统中的目录)结果是这里
  • e2fsck -Df服务器负载没有变化后

我以为,这样的缓存目录组织有利于实现最佳磁盘性能。显然我错了。

您建议采取什么措施来解决这个高负载/磁盘响应缓慢的问题?

相关内容