我在用nginx做缓存的时候,发现一个现象,nginx会实时管理缓存空间大小,比如我设置缓存max_size=100m,
nginx会实时监控当前缓存空间大小,但是问题是:当nginx缓存的文件大于1m时,nginx的监控正常工作,记录缓存文件大小,
可是nginx缓存的文件小于1m的时候,nginx监控会把新缓存的文件按照1m大小计算。求教
nginx 缓存文件时,不足1m安装1m算,为什么?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 一小小只-音视频开发 2017-08-01 05:25关注
nginx缓存的源码:
ngx_http_file_cache_update(ngx_http_request_t *r, ngx_temp_file_t *tf)
{
off_t fs_size;
ngx_int_t rc;
ngx_file_uniq_t uniq;
ngx_file_info_t fi;
ngx_http_cache_t *c;
ngx_ext_rename_file_t ext;
ngx_http_file_cache_t *cache;c = r->cache; if (c->updated) { return; } ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "http file cache update"); cache = c->file_cache; c->updated = 1; c->updating = 0; uniq = 0; fs_size = 0; ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "http file cache rename: \"%s\" to \"%s\"", tf->file.name.data, c->file.name.data); ext.access = NGX_FILE_OWNER_ACCESS; ext.path_access = NGX_FILE_OWNER_ACCESS; ext.time = -1; ext.create_path = 1; ext.delete_file = 1; ext.log = r->connection->log; rc = ngx_ext_rename_file(&tf->file.name, &c->file.name, &ext); if (rc == NGX_OK) { if (ngx_fd_info(tf->file.fd, &fi) == NGX_FILE_ERROR) { ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno, ngx_fd_info_n " \"%s\" failed", tf->file.name.data); rc = NGX_ERROR; } else { uniq = ngx_file_uniq(&fi); //change by liangc //fs_size = (ngx_file_fs_size(&fi) + cache->bsize - 1) / cache->bsize; fs_size = ((&fi)->st_size + cache->bsize - 1) / cache->bsize; } } ngx_shmtx_lock(&cache->shpool->mutex); c->node->count--; c->node->error = 0; c->node->uniq = uniq; c->node->body_start = c->body_start; ngx_log_error(NGX_LOG_ERR, ngx_cycle->log, 0, "0............................ngx_http_file_cache_update : cache->sh->size = %d ,c->node->fs_size = %d fs_size = %d ",cache->sh->size, c->node->fs_size, fs_size); cache->sh->size += fs_size - c->node->fs_size; c->node->fs_size = fs_size; if (rc == NGX_OK) { c->node->exists = 1; } c->node->updating = 0; ngx_shmtx_unlock(&cache->shpool->mutex);
}
解决 无用评论 打赏 举报
悬赏问题
- ¥30 这是哪个作者做的宝宝起名网站
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!