(二) 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内存结构图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容