我有一个网站,每分钟大约有 60,000 个请求,由 nginx 提供服务。最近,我启用了该功能open file cache
,并看到性能有了显著改善。但在晚上,当负载最大时,响应时间仍然很长,并且 nginx 使用了大量的 IO。
以下是我当前的设置:
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
我仍记得一些事情:
free -m
total used free shared buffers cached
Mem: 7910 6917 992 0 439 885
-/+ buffers/cache: 5592 2317
Swap: 8099 0 8099
问题:现在我应该为open_file_cache max=10000
和其他参数选择正确的值吗?10000 够吗?太小还是太大?有没有办法监控打开文件缓存的使用情况?
答案1
打开文件缓存是一个用于元数据操作(文件修改时间、文件存在性等)的缓存系统,而不是用于文件内容的缓存系统,因此它有一定的帮助,但不如你想象的那么多。
您可以尝试以下解决方法:
- 如果您已打开动态 gzip,请降低 gzip 压缩率。
- 如果你运行的是较新的内核(> 2.6.22),请尝试打开 aio。检查http://wiki.nginx.org/HttpCoreModule#aio
- 禁用访问日志记录。仅此一项就可以大大提高性能。但请确保您不需要它!
- 尝试实际的文件内容缓存模块,例如https://github.com/bpaquet/ngx_http_enhanced_memcached_module。警告:这将需要从源代码重新编译 nginx!
答案2
您也可以尝试缓冲区,因为当您有足够的缓冲区时,nginx 不会写入任何临时文件