为什么 nginx 1.0.0 似乎不使用 Gentoo 上的内核打开文件缓存?(高 iowait)

为什么 nginx 1.0.0 似乎不使用 Gentoo 上的内核打开文件缓存?(高 iowait)
free -m
             total       used       free     shared    buffers     cached
Mem:          7996       2043       5952          0         73        140
-/+ buffers/cache:       1830       6165
Swap:         7812         15       7797

nginx -v

nginx:nginx 版本:nginx/1.0.0

uname -a

Linux tr1 2.6.38-gentoo-r6 #4 SMP 2011 年 9 月 27 日星期二 11:24:13 EEST x86_64 Intel(R) Xeon(R) CPU E5620 @ 2.40GHz 正版英特尔 GNU/Linux

cat /proc/version

Linux 版本 2.6.38-gentoo-r6 (root@tr1) (gcc 版本 4.4.5 (Gentoo 4.4.5 p1.2, pie-0.4.5) ) #4 SMP 2011 年 9 月 27 日星期二 11:24:13 EEST

grep directio /etc/nginx/nginx.conf
[nothing]
grep open_file /etc/nginx/nginx.conf
open_file_cache max=2000 inactive=3600s;
[...]

我不知道有什么禁用内核文件缓存。我在 nginx.conf 中添加和删除了 open_file_cache。但是,nginx 似乎直接从磁盘读取所有内容。我们还有更多具有“相同”nginx 配置(php 上游负载平衡,加上静态文件传送)的 nginx 机器,它们确实使用内核打开文件缓存,I/O 负载要少得多。

在这种情况下,同一台机器上还运行着一个 apache。

iostat, iotop -o

通常显示永久磁盘使用情况(与其他机器上少数相同的 nginx 负载均衡器不同),nginx 是顶级 I/O(静态文件传送)

htop

给出了空闲/缓冲区/内存情况的清晰图像。并证实了空闲所表示的内容。进程使用了​​ 1GB 内存。大约 6GB 内存未使用。剩余内存中只有一小部分用于内核缓存(htop 将其显示为内存使用量的黄色部分)

我们想找出为什么 nginx 会将磁盘 I/O 驱动到 100%,而剩余几 GB 的 RAM(用于内核打开文件缓存)

PS:正如我所说,我们运行了一些类似的 php-upstream 平衡器,并通过 nginx 提供额外的静态文件传输。但只有这一个由于过多的 iowait 导致平均负载过高,从而拖慢了其他所有的速度。

相关内容