[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
数据结构, 见下图: