(二) nginx内存分析

内存控制的好,程序就稳定,一个好的内存设计,为一个牛逼的发动机提供资源。

使用内存的时候,从ngx_pool_t中获取内存。

不使用的时候,只需要销毁ngx_pool_t对象即可,相关联的内存都被释放完毕。

也就是说ngx_pool_t对象就算一个内存的管家,你需要用的时候向它登记就行,不用操心申请啊,释放啊等操作,很方便。

struct ngx_pool_s {
    ngx_pool_data_t       d;
    size_t                max;
    ngx_pool_t           *current;
    ngx_chain_t          *chain;
    ngx_pool_large_t     *large;
    ngx_pool_cleanup_t   *cleanup;
    ngx_log_t            *log;
};

ngx_create_pool(size_t size, ngx_log_t *log)

创建一个初始节点大小为sizepool。并且size的大小必须小于等于NGX_MAX_ALLOC_FROM_POOL,且必须大于sizeof(ngx_pool_t)

NGX_MAX_ALLOC_FROM_POOL大小为 (ngx_pagesize - 1),在x86上,ngx_pagesize大小为4096。
之所以是4096,是因为寻址页面大小是4096,这个数值的设定可以照顾到大多数情况的内存使用情景,太大和太小都不是很适合。至于为何是这个数,应该是和处理器架构有关系。

size的大小必须小于等于NGX_MAX_ALLOC_FROM_POOL,且必须大于sizeof(ngx_pool_t)。因为大了寻址寻不到白白浪费空间。


(二) nginx内存分析_第1张图片
nginx内存结构图

你可能感兴趣的:((二) nginx内存分析)