四、open_log_file_cache(文件句柄缓存)
作用
缓存日志文件的句柄(文件描述符),避免每次写日志都执行 open() 和 close() 系统调用,减少CPU开销。
语法
nginx
open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m;
参数详解
参数 说明
max=1000 最大缓存句柄数量,超出的按LRU算法淘汰
inactive=20s 空闲超时时间,超过则从缓存移除
min_uses=3 在inactive时间内被访问至少3次才缓存(冷启动优化)
valid=1m 缓存条目有效期,过期后重新验证
工作流程示例
首次访问日志文件 → 打开并写入,不缓存(未达到min_uses)
在20秒内访问第2、3次 → 达到min_uses=3,放入缓存
后续请求 → 直接使用缓存句柄,不再 open/close
20秒无访问 → 缓存条目移除,句柄关闭
超过1000个条目 → 淘汰最不常用的
每1分钟 → 重新验证缓存条目的有效性
使用场景
适合:多虚拟主机、多日志文件的场景
无效:使用 syslog 输出日志时
收益微小:仅1-2个日志文件时可不配置
配置位置
http {
open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m;
}
nginx 访问日志缓冲
access_log /var/log/nginx/access.log main buffer=32k flush=5s;
组成部分 值 含义
指令名 access_log 定义访问日志
日志路径 /var/log/nginx/access.log 日志文件存放位置
日志格式 main 使用名为 main 的格式(需用 log_format 预定义)
缓冲区大小 buffer=32k 内存中攒够 32KB 数据后,批量写入磁盘
刷新时间 flush=5s 即使没攒够 32KB,最多等 5 秒也必须写入磁