精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Nginx源碼分析-內存池

開發 前端
Nginx的內存池實現得很精巧,代碼也很簡潔。總的來說,所有的內存池基本都一個宗旨:申請大塊內存,避免“細水長流”。

Nginx的內存池實現得很精巧,代碼也很簡潔。總的來說,所有的內存池基本都一個宗旨:申請大塊內存,避免“細水長流”。

一、創建一個內存池

nginx內存池主要有下面兩個結構來維護,他們分別維護了內存池的頭部和數據部。此處數據部就是供用戶分配小塊內存的地方。

//該結構用來維護內存池的數據塊,供用戶分配之用。

typedef struct {

u_char                    *last;                 //當前內存分配結束位置,即下一段可分配內存的起始位置

u_char                    *end;                //內存池結束位置

ngx_pool_t              *next;                //鏈接到下一個內存池

ngx_uint_t                failed;                //統計該內存池不能滿足分配請求的次數

} ngx_pool_data_t;

//該結構維護整個內存池的頭部信息。

struct ngx_pool_s {

ngx_pool_data_t                    d;              //數據塊

size_t                                  max;             //數據塊的大小,即小塊內存的最大值

ngx_pool_t                         *current;         //保存當前內存池

ngx_chain_t                        *chain;            //可以掛一個chain結構

ngx_pool_large_t                *large;            //分配大塊內存用,即超過max的內存請求

ngx_pool_cleanup_t            *cleanup;         //掛載一些內存池釋放的時候,同時釋放的資源。

ngx_log_t                             *log;

};

有了上面的兩個結構,就可以創建一個內存池了,nginx用來創建一個內存池的接口是:ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log)(位于src/core/ngx_palloc.c中);調用這個函數就可以創建一個大小為size的內存池了。這里,我用內存池的結構圖來展示,就不做具體的代碼分析了。

 

 

ngx_create_pool接口函數就是分配上圖這樣的一大塊內存,然后初始化好各個頭部字段(上圖中的彩色部分)。紅色表示的四個字段就是來自于上述的第一個結構,維護數據部分,由圖可知:last是用戶從內存池分配新內存的開始位置,end是這塊內存池的結束位置,所有分配的內存都不能超過end。藍色表示的max字段的值等于整個數據部分的長度,用戶請求的內存大于max時,就認為用戶請求的是一個大內存,此時需要在紫色表示的large字段下面單獨分配;用戶請求的內存不大于max的話,就是小內存申請,直接在數據部分分配,此時將會移動last指針。

二、分配小塊內存(size <= max)

上面創建好了一個可用的內存池了,也提到了小塊內存的分配問題。nginx提供給用戶使用的內存分配接口有:

void *ngx_palloc(ngx_pool_t *pool, size_t size);

void *ngx_pnalloc(ngx_pool_t *pool, size_t size);

void *ngx_pcalloc(ngx_pool_t *pool, size_t size);

void *ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment);

ngx_palloc和ngx_pnalloc都是從內存池里分配size大小內存,至于分得的是小塊內存還是大塊內存,將取決于size的大小;他們的不同之處在于,palloc取得的內存是對齊的,pnalloc則否。ngx_pcalloc是直接調用palloc分配好內存,然后進行一次0初始化操作。ngx_pmemalign將在分配size大小的內存并按alignment對齊,然后掛到large字段下,當做大塊內存處理。下面用圖形展示一下分配小塊內存的模型:

 

 

上圖這個內存池模型是由上3個小內存池構成的,由于第一個內存池上剩余的內存不夠分配了,于是就創建了第二個新的內存池,第三個內存池是由于前面兩個內存池的剩余部分都不夠分配,所以創建了第三個內存池來滿足用戶的需求。由圖可見:所有的小內存池是由一個單向鏈表維護在一起的。這里還有兩個字段需要關注,failed和current字段。failed表示的是當前這個內存池的剩余可用內存不能滿足用戶分配請求的次數,即是說:一個分配請求到來后,在這個內存池上分配不到想要的內存,那么就failed就會增加1;這個分配請求將會遞交給下一個內存池去處理,如果下一個內存池也不能滿足,那么它的failed也會加1,然后將請求繼續往下傳遞,直到滿足請求為止(如果沒有現成的內存池來滿足,會再創建一個新的內存池)。current字段會隨著failed的增加而發生改變,如果current指向的內存池的failed達到了4的話,current就指向下一個內存池了。猜測:4這個值應該是作者的經驗值,或者是一個統計值。

三、大塊內存的分配(size > max)

大塊內存的分配請求不會直接在內存池上分配內存來滿足,而是直接向操作系統申請這么一塊內存(就像直接使用malloc分配內存一樣),然后將這塊內存掛到內存池頭部的large字段下。內存池的作用在于解決小塊內存池的頻繁申請問題,對于這種大塊內存,是可以忍受直接申請的。同樣,用圖形展示大塊內存申請模型:

 

 

注意每塊大內存都對應有一個頭部結構(next&alloc),這個頭部結構是用來將所有大內存串成一個鏈表用的。這個頭部結構不是直接向操作系統申請的,而是當做小塊內存(頭部結構沒幾個字節)直接在內存池里申請的。這樣的大塊內存在使用完后,可能需要第一時間釋放,節省內存空間,因此nginx提供了接口函數:ngx_int_t ngx_pfree(ngx_pool_t *pool, void *p);此函數專門用來釋放某個內存池上的某個大塊內存,p就是大內存的地址。ngx_pfree只會釋放大內存,不會釋放其對應的頭部結構,畢竟頭部結構是當做小內存在內存池里申請的;遺留下來的頭部結構會作下一次申請大內存之用。

四、cleanup資源

 

 

可以看到所有掛載在內存池上的資源將形成一個循環鏈表,一路走來,發現鏈表這種看似簡單的數據結構卻被頻繁使用。由圖可知,每個需要清理的資源都對應有一個頭部結構,這個結構中有一個關鍵的字段handler,handler是一個函數指針,在掛載一個資源到內存池上的時候,同時也會注冊一個清理資源的函數到這個handler上。即是說,內存池在清理cleanup的時候,就是調用這個handler來清理對應的資源。比如:我們可以將一個開打的文件描述符作為資源掛載到內存池上,同時提供一個關閉文件描述的函數注冊到handler上,那么內存池在釋放的時候,就會調用我們提供的關閉文件函數來處理文件描述符資源了。

五、內存的釋放

只提供給了用戶申請內存的接口,卻沒有釋放內存的接口,那么nginx是如何完成內存釋放的呢?總不能一直申請,用不釋放啊。針對這個問題,nginx利用了web server應用的特殊場景來完成;一個web server總是不停的接受connection和request,所以nginx就將內存池分了不同的等級,有進程級的內存池、connection級的內存池、request級的內存池。也就是說,創建好一個worker進程的時候,同時為這個worker進程創建一個內存池,待有新的連接到來后,就在worker進程的內存池上為該連接創建起一個內存池;連接上到來一個request后,又在連接的內存池上為request創建起一個內存池。這樣,在request被處理完后,就會釋放request的整個內存池,連接斷開后,就會釋放連接的內存池。因而,就保證了內存有分配也有釋放。

總結:通過內存的分配和釋放可以看出,nginx只是將小塊內存的申請聚集到一起申請,然后一起釋放。避免了頻繁申請小內存,降低內存碎片的產生等問題

原文:http://www.tbdata.org/archives/1390

【編輯推薦】

  1. Nginx 1.0.0正式版發布 附下載
  2. 1分鐘完美安裝最新CentOS+Nginx+PHP-FPM+MySQL
  3. 快速部署Python應用:Nginx+uWSGI配置詳解
  4. 在Nginx上運行Ruby on Rails
  5. 在Nginx下針對IP和目錄限速
責任編輯:陳貽新 來源: 淘寶數據平臺與產品部官方博客
相關推薦

2022-08-07 13:06:43

NGINX服務器

2013-05-28 13:57:12

MariaDB

2012-09-20 10:07:29

Nginx源碼分析Web服務器

2015-11-16 11:22:05

Java對象內存分配

2011-04-25 17:15:39

MongodbMMAP

2024-10-31 09:24:42

2018-10-31 15:54:47

Java線程池源碼

2021-04-23 20:59:02

ThreadLocal內存

2017-01-11 14:02:32

JVM源碼內存

2018-02-07 16:23:58

連接池內存池AI

2025-07-01 02:25:00

2025-10-29 01:55:00

2022-12-16 08:31:37

調度線程池源碼

2025-09-24 18:39:45

2011-03-15 11:33:18

iptables

2014-08-26 11:11:57

AsyncHttpCl源碼分析

2021-11-08 15:06:15

鴻蒙HarmonyOS應用

2021-11-05 15:00:33

鴻蒙HarmonyOS應用

2021-05-17 09:28:59

鴻蒙HarmonyOS應用

2015-04-29 15:29:16

C++ STL內存配置關鍵源碼分析
點贊
收藏

51CTO技術棧公眾號

国产精品久久久久久久久久久不卡| 欧美不卡激情三级在线观看| 日韩精品电影网站| 国产精品亚洲欧美在线播放| 欧美精品一卡| 亚洲精品影视在线观看| 美女网站色免费| 天堂av在线电影| 久久精品人人做人人爽人人 | 欧美三区四区| 亚洲免费观看高清完整版在线 | 亚洲精品一区二区三区不卡| 国产精品女主播一区二区三区| 一区二区三区久久精品| www.欧美com| 成人精品动漫| 午夜精品免费在线观看| 亚洲欧美日韩在线综合| 污视频在线免费观看| 久久69国产一区二区蜜臀| 国内伊人久久久久久网站视频 | 在线中文字日产幕| 久久亚洲精品爱爱| 午夜视频在线观看一区| 宅男av一区二区三区| 日韩av资源站| 粉嫩欧美一区二区三区高清影视 | 天码人妻一区二区三区在线看| 欧美激情电影| 亚洲天堂av电影| 亚洲欧美日韩偷拍| 精品久久国产一区| 欧美影片第一页| 又粗又黑又大的吊av| 一区二区三区伦理| 中文字幕亚洲视频| 日韩久久久久久久| 免费资源在线观看| av爱爱亚洲一区| 99久热re在线精品996热视频| 国产精品成人久久久| 亚洲欧美日韩视频二区| 久久久久久久久久婷婷| 私库av在线播放| 欧美韩日高清| 日韩中文字幕网址| www久久久久久久| 欧美日韩色图| 国产一区二区av| av女人的天堂| 国内亚洲精品| 亚洲午夜女主播在线直播| 黄色国产在线观看| 日韩最新在线| 日韩精品视频三区| 国产伦精品一区二区三区妓女| 国内精品国产成人国产三级粉色| 欧美一区二区在线观看| 三日本三级少妇三级99| 国产视频一区二| 欧美一区二区三区视频免费播放| 国产永久免费网站| 日韩欧国产精品一区综合无码| 欧美日韩中文另类| 日本免费色视频| 日韩免费在线电影| 欧美一区二区久久久| 一本之道在线视频| 一区中文字幕电影| 亚洲国产精品一区二区久| 免费a v网站| 免费国产自久久久久三四区久久| 亚洲网站视频福利| 91大神福利视频| 天天色天天射综合网| 久久久精品电影| 国产亚洲精品久久久久久打不开| 亚洲东热激情| 日本高清视频精品| 夜夜嗨av禁果av粉嫩avhd| 国内久久婷婷综合| 国产精品大全| 九色国产在线观看| 国产精品久久久一本精品| 99亚洲精品视频| 2021中文字幕在线| 色偷偷88欧美精品久久久| 鲁一鲁一鲁一鲁一av| 欧美影院精品| 亚洲欧美国产日韩天堂区| 永久免费av无码网站性色av| 亚洲人成免费网站| 97视频免费在线观看| 无码人妻久久一区二区三区| 韩国av一区二区三区在线观看| 国产精品久久国产三级国电话系列 | 欧美日韩国产乱码电影| 爱情岛论坛亚洲自拍| 亚洲综合福利| 另类色图亚洲色图| 午夜精品久久久久久久久久久久久蜜桃 | 欧美日本黄视频| 91美女免费看| 激情综合色播激情啊| 精品国产乱码久久久久久郑州公司| 免费在线黄色影片| 一区二区三区免费看视频| 国产1区2区在线| 欧洲大片精品免费永久看nba| 亚洲毛片在线看| 久久精品一级片| 日本va欧美va精品发布| 国产伦精品一区二区三区视频孕妇 | 免费毛片小视频| www久久久| 亚洲少妇中文在线| 久久综合色综合| 久久99久久久久| 麻豆av福利av久久av| 性欧美1819sex性高清大胸| 日本高清不卡在线观看| 欧美性生交xxxxx| 天天做天天爱综合| 国产精品久久久久9999| 外国精品视频在线观看 | 在线国产99| 另类专区亚洲| 亚洲精品一区在线观看| 久久精品亚洲a| 日韩精品电影一区亚洲| 国产在线欧美日韩| 国产在线xxx| 日韩精品专区在线影院重磅| www.4hu95.com四虎| 性一交一乱一区二区洋洋av| aaa级精品久久久国产片| 毛片网站在线免费观看| 欧美在线不卡视频| 男生草女生视频| 国产精品毛片在线| 国产无套精品一区二区| 欧美xxxx免费虐| 日韩精品一区二区三区视频播放| 天天操夜夜操av| 蜜乳av一区二区三区| 日韩高清dvd| 小黄鸭精品aⅴ导航网站入口| 亚洲第一精品久久忘忧草社区| 欧美亚洲日本在线| 国产精品一级在线| 精品无码av无码免费专区| 亚洲综合伊人| 久热爱精品视频线路一| 91久久国语露脸精品国产高跟| 中文欧美字幕免费| 在线观看免费视频高清游戏推荐| av亚洲在线观看| 国产精品视频一区二区三区四| 成人在线免费电影| 欧美色手机在线观看| 五月天婷婷丁香网| 激情久久五月天| 丰满女人性猛交| 亚洲一区 二区| 国模精品视频一区二区| 污污网站免费在线观看| 欧美视频在线观看免费网址| 扒开jk护士狂揉免费| 日韩1区2区日韩1区2区| 一区在线电影| 日韩精品一区二区三区中文| 久久久久久18| 你懂的视频在线观看| 欧美色男人天堂| 天天综合天天做| 成人一区二区三区中文字幕| 欧美国产亚洲一区| 日韩电影免费在线观看| 91午夜在线播放| 九色porny自拍视频在线播放| 亚洲男人av电影| 在线观看毛片网站| 亚洲一区免费在线观看| 国产精品一区二区入口九绯色| 日韩精品视频网站| 青青草综合视频| 开心激情综合| 国产免费久久av| 成人免费高清观看| 国产亚洲一区二区精品| wwwav在线播放| 欧美午夜激情小视频| 小早川怜子久久精品中文字幕| 激情成人午夜视频| 黄色av网址在线播放| 999久久久免费精品国产| 国产一区二区三区四区hd| 福利一区二区| 久久人人爽人人| 97视频精彩视频在线观看| 欧美成人一级视频| 国产偷人爽久久久久久老妇app| 亚洲乱码国产乱码精品精可以看 | 日韩福利视频一区| 国产日韩av在线| 综合毛片免费视频| 欧美黑人极品猛少妇色xxxxx| 可以直接在线观看的av| 日韩精品专区在线影院观看| 中文av免费观看| 午夜成人免费电影| 波多野结衣不卡视频| 久久精品视频在线看| 成人欧美精品一区二区| 久久 天天综合| 成年人视频在线免费| 欧美日韩影院| 一区二区视频在线播放| 精品中文一区| 国产中文一区二区| 亚洲一区二区三区中文字幕在线观看| 国产精品99久久久久久白浆小说| 1024在线看片你懂得| 久久久国产精品免费| av网站在线免费观看| 日韩福利在线播放| 丰满少妇高潮在线观看| 在线成人免费视频| 国产91av在线播放| 91传媒视频在线播放| 91午夜视频在线观看| 亚洲综合在线观看视频| 91麻豆精品久久毛片一级| 久久久影视传媒| 日韩免费高清一区二区| 国产91丝袜在线观看| 国产性生活一级片| 蓝色福利精品导航| 91精品无人成人www| 日本最新不卡在线| www.日日操| 日韩av电影免费观看高清完整版| 欧美成人免费高清视频| 久久精品成人| 欧美私人情侣网站| 日韩电影在线一区二区| 国产真实乱子伦| 久久精品电影| 成人在线观看a| 日韩国产欧美一区二区三区| 92看片淫黄大片一级| 亚洲视频1区| 久久无码高潮喷水| 久久久成人网| 韩国日本美国免费毛片| 天堂影院一区二区| 在线观看av日韩| 麻豆成人久久精品二区三区红| 伊人影院综合在线| 精品在线播放午夜| 日本wwwxx| 成人国产亚洲欧美成人综合网| 国产精品久久无码| 久久久99免费| 亚洲女人毛茸茸高潮| 国产精品国产自产拍高清av王其| 日本黄色录像视频| 一区av在线播放| 一区二区三区视频免费看| 色哟哟一区二区| 一级特黄aaa大片| 日韩一级二级三级精品视频| 欧美亚洲精品在线观看| 亚洲美女av在线| 天堂аⅴ在线地址8| 色综合天天狠天天透天天伊人| segui88久久综合9999| 日本免费在线精品| 亚洲欧美专区| 国产伦精品一区二区三区照片 | 伊人精品久久久久7777| 亚洲最新色图| 国产亚洲欧美在线视频| 美国毛片一区二区三区| 国模大尺度视频| 久久久综合九色合综国产精品| 成年人网站在线观看视频| 亚洲国产精品一区二区久久| 日本a级c片免费看三区| 91精品欧美福利在线观看| 蜜臀av中文字幕| 国产一区二区三区免费视频| 大片免费在线看视频| 91精品国产91久久久久久吃药| 成人午夜一级| 国产伦精品一区二区三区照片| 欧美亚洲国产激情| 青草视频在线观看视频| 美女性感视频久久| 精品一区二区视频在线观看| 国产精品视频免费| 影音先锋亚洲天堂| 欧美顶级少妇做爰| 加勒比一区二区三区在线| 欧美日韩国产成人在线| 搜成人激情视频| 国产不卡一区二区三区在线观看| 不卡av一区二区| 玩弄中年熟妇正在播放| 精品亚洲成a人在线观看 | 亚洲自拍都市欧美小说| 国产91porn| 奇米影视在线99精品| 国产美女视频免费观看下载软件| 亚洲人午夜精品天堂一二香蕉| 亚洲天堂一区在线观看| 精品日韩av一区二区| 视频三区在线| 国产精品91久久久久久| 国产精品一区二区中文字幕| 中国一级黄色录像| 蜜臀a∨国产成人精品| 黄瓜视频污在线观看| 亚洲最色的网站| 国产成年妇视频| 色噜噜狠狠狠综合曰曰曰88av| 中文字幕资源网在线观看免费 | 色乱码一区二区三区在线| 91视视频在线直接观看在线看网页在线看| 久久高清内射无套| 欧美区在线观看| 成人欧美亚洲| 国产成人在线亚洲欧美| 国产99久久| 能在线观看的av| 91女人视频在线观看| 国产午夜精品无码一区二区| 欧美一区二区三区公司| 久久99精品久久| 成人美女av在线直播| 99久久激情| 日韩在线不卡一区| 国产精品久久久久天堂| 中文字幕第一页在线播放| 国产亚洲在线播放| 日本国产欧美| 水蜜桃一区二区三区| 日本特黄久久久高潮| 精品国产成人亚洲午夜福利| 日本久久电影网| 成人在线免费看| 国产日韩欧美夫妻视频在线观看| 青青草国产免费一区二区下载| 天天爱天天操天天干| 国产精品区一区二区三区| 在线观看免费黄色小视频| xxxxx91麻豆| 亚洲伊人影院| 99热自拍偷拍| 欧美激情在线一区二区| 中文 欧美 日韩| 欧美成人精品一区| 97久久综合精品久久久综合| 国产主播自拍av| 国产人成亚洲第一网站在线播放| 最近中文字幕av| 超碰精品一区二区三区乱码| 影音先锋欧美激情| 久久精品国产sm调教网站演员| 97精品电影院| 中文字幕久久网| 久久99精品久久久久久青青91| 国产成人在线中文字幕| 欧美牲交a欧美牲交| 久久精品欧美日韩| 国产精品久久久久久久成人午夜| 欧美老女人xx| 欧美女王vk| 激情图片中文字幕| 精品久久久久久亚洲国产300| 韩国三级av在线免费观看| 成人国产精品免费视频| 欧美性色综合| 亚洲区自拍偷拍| 日韩免费观看高清完整版在线观看| 牛牛精品一区二区| 亚洲精品日韩成人| 丁香亚洲综合激情啪啪综合| 免费看污视频的网站| 久久中文字幕国产| 亚洲春色h网| 色婷婷一区二区三区在线观看| 精品久久久久久久久久久久久 | 精品久久国产视频| 日本高清不卡在线| 欧美午夜不卡| 成年人在线免费看片| 亚洲成人免费网站| 91伊人久久| 蜜臀av无码一区二区三区|