[nginx] nginx源碼分析--內(nèi)存管理
1. nginx的內(nèi)存,都是內(nèi)存池管理,創(chuàng)建一個內(nèi)存池就malloc一塊內(nèi)存出來.
2. 兩個重要的地方會新建內(nèi)存池, 一個新連接建立的時候, 一個是request創(chuàng)建的時候.
3. 在內(nèi)存池里申請內(nèi)存的時候,就是一塊挨著一塊的按順序用. 這種叫small. 如果比內(nèi)存池的size還大的,就malloc,然后把它索引到large鏈表里,
large的鏈表頭結(jié)構(gòu)用small的方式申請.
4. 由于頻繁的申請, 每一個connect都要malloc, 可能會有性能問題. 這時候改進法案就是使用jemalloc或者tcmalloc.
另外, nginx這個內(nèi)存池的設(shè)計初衷是為了防止泄露,連接結(jié)束時, 所以相關(guān)資源一下釋放掉. 而且, nignx的人認為實時的malloc多性能影響不大,
參考這個討論: https://www.ruby-forum.com/t/memory-pool/240348
數(shù)據(jù)結(jié)構(gòu), 見下圖:

浙公網(wǎng)安備 33010602011771號