[nginx] nginx源码分析--内存管理

1. nginx的内存,都是内存池管理,创建一个内存池就malloc一块内存出来.

2. 两个重要的地方会新建内存池, 一个新连接建立的时候, 一个是request创建的时候.

3. 在内存池里申请内存的时候,就是一块挨着一块的按顺序用. 这种叫small. 如果比内存池的size还大的,就malloc,然后把它索引到large链表里,

large的链表头结构用small的方式申请.

4. 由于频繁的申请, 每一个connect都要malloc, 可能会有性能问题. 这时候改进法案就是使用jemalloc或者tcmalloc.

 

另外, nginx这个内存池的设计初衷是为了防止泄露,连接结束时, 所以相关资源一下释放掉. 而且, nignx的人认为实时的malloc多性能影响不大,

参考这个讨论: https://www.ruby-forum.com/t/memory-pool/240348

 

数据结构, 见下图:

posted on 2021-04-28 16:48  toong  阅读(128)  评论(0编辑  收藏  举报