前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx性能提升 - open_file_cache指令

Nginx性能提升 - open_file_cache指令

作者头像
用户2825413
发布2019-07-16 11:01:55
3K0
发布2019-07-16 11:01:55
举报
文章被收录于专栏:呆呆熊的技术路

今天我们使用 open_file_cache 指令来尝试提高我们的nginx服务性能

前置工具

strace常用来跟踪进程执行时的系统调用和所接收的信号,是一个强大的工具。

因为这里本人使用的是mac系统,对应的mac分析命令 dtruss

dtruss使用

首先我们找到Nginx的woker进程id

代码语言:javascript
复制
ps -ef |grep nginx

# dtruss -p 进程号 监听请求
dtruss -p 864

因为是mac系统,使用的是Kqueue事件模型,基本和epoll比较相似

我们的open_file_cache指令

官方地址: http://nginx.org/en/docs/http/ngx_http_core_module.html#open_file_cache

代码语言:javascript
复制
句法:    open_file_cache off;
        open_file_cache max=N [inactive=time];
默认:    open_file_cache off;
语境:    http,server,location
配置可以存储的缓存:
  1. 打开文件描述符,它们的大小和修改时间;
  2. 关于目录存在的信息;
  3. 文件查找错误,例如“找不到文件”,“没有读取权限”等。
  4. 应该通过open_file_cache_errors 指令单独启用缓存错误 。
该指令具有以下参数:
  1. max 设置缓存中的最大元素数; 在缓存溢出时,删除最近最少使用(LRU)的元素;
  2. inactive 定义一个时间,如果在此期间未访问该元素,则从该缓存中删除该元素; 默认情况下,它是60秒;
  3. off 禁用缓存。

open_file_cache max=102400 inactive=20s; max指定缓存数量 inactive是指经过多长时间文件没被请求后删除缓存。我指定了20s,所以等到至少20s不访问这个文件,相应缓存的这个文件的更改信息才会被删除。

代码语言:javascript
复制
句法:    open_file_cache_errors on | off;
默认:    open_file_cache_errors off;
语境:    http,server,location
通过open_file_cache启用或禁用文件查找错误的缓存 。

文件错误是否也同样缓存

代码语言:javascript
复制
句法:    open_file_cache_min_uses number;
默认:    open_file_cache_min_uses 1;
语境:    http,server,location

open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件更改信息一直是在缓存中打开的

代码语言:javascript
复制
句法:    open_file_cache_valid time;
默认:    open_file_cache_valid 60s;
语境:    http,server,location

这个是指多长时间检查一次缓存的有效信息。也就是说即使我一直访问这个文件,30s后会检查此文件的更改信息是否变化,发现变化就更新

nginx.conf 示例

nginx.conf配置

代码语言:javascript
复制
location / {
    open_file_cache max=1000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;

    index  index.html index.php;
}

分析(使用dtruss工具追踪)

通过我们分析调用流程,观察第一次和第二次区别,第二次因为通过第一次已经把文件描述符缓存了,所以省略了 open("/Users/Shared/www/index.html")等文件操作,在大流量环境中,会有显著的提高。

但同时注意缓存的时效性,根据实际情况,来设置缓存的时间。

我们再试验一个反例说明 open_file_cache_errors:

  1. 将访问的index.html文件改为index.a
代码语言:javascript
复制
mv index.html index.a

因为我们设置了open_file_cache_valid 30s,我们等待30s后,才会去检查缓存.

  1. 刷新浏览器
  1. 我们再将index.a改为index.html
代码语言:javascript
复制
mv index.a index.html

因为open_file_cache_errors指令的开启(缓存错误信息), 同样需要等待30s,才能返回正确值

如果将open_file_cache_errors指令缓存关掉,将会立即生效。

此文主要介绍了open_file_cache相关指令用法, 希望此文对大家有所帮助.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 呆呆熊的技术路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前置工具
    • dtruss使用
    • 我们的open_file_cache指令
      • 配置可以存储的缓存:
        • 该指令具有以下参数:
        • nginx.conf 示例
        • 分析(使用dtruss工具追踪)
        • 我们再试验一个反例说明 open_file_cache_errors:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档