close

引用網址:https://juejin.cn/post/6844903779578413064

前置工具

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

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

dtruss使用

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

ps -ef |grep nginx

# dtruss -p 进程号 监听请求
dtruss -p 864
复制代码

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

 

 

 

我们的open_file_cache指令

官方地址: nginx.org/en/docs/htt…

句法:	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不访问这个文件,相应缓存的这个文件的更改信息才会被删除。

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

文件错误是否也同样缓存

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

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

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

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

nginx.conf 示例

nginx.conf配置

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
mv index.html index.a
复制代码

 

 

 

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

  1. 刷新浏览器

 

 

 

  1. 我们再将index.a改为index.html
mv index.a index.html
复制代码

 

 

 

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

 

 

 

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

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


作者:小宇渣渣渣
链接:https://juejin.cn/post/6844903779578413064
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
arrow
arrow
    文章標籤
    nginx
    全站熱搜
    創作者介紹
    創作者 龍之家族 的頭像
    龍之家族

    龍之家族

    龍之家族 發表在 痞客邦 留言(0) 人氣()