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 导致平均负载过高,从而拖慢了其他所有的速度。