Nginx中基本的内存池初始化怎么配置(nginx内存配置)

Nginx中基本的内存池初始化怎么配置(nginx内存配置)

浏览次数:
信息来源: 用户投稿
更新日期: 2025-10-05 08:49:49
文章简介

ngx_cycle的初始化整个初始化过程中,最重要的就是全局变量nginx_cycle的初始化,很多变量都是在这个过程中初始化的nginx_cycle又是通过两个局部变量init_cycle和c

2025阿里云双十一服务器活动

ngx_cycle的初始化整个初始化过程中,最重要的就是全局变量nginx_cycle的初始化,很多变量都是在这个过程中初始化的

nginx_cycle又是通过两个局部变量init_cycle和cycle实现初始化的

事实上,日志初始化也可以算是对nginx_cyle的初始化,因为在代码中接下来马上要发生的就是一个赋值

ngx_memzero(&init_cycle,sizeof(ngx_cycle_t));

init_cycle.pool=ngx_create_pool(1024,log);

if(init_cycle.pool==null){

//保存调用参数到全局变量,init_cycle只用于提供log参数

if(ngx_save_argv(&init_cycle,argc,argv)!=ngx_ok){

//保存配置文件路径、程序运行路径、调用参数到init_cycle

if(ngx_process_options(&init_cycle)!=ngx_ok){

//获取操作系统信息、cpu信息、最大连接数、是否支持非阻塞连接等

if(ngx_os_init(log)!=ngx_ok){

if(ngx_crc32_table_init()!=ngx_ok){

//获取所有继承连接fd的相关信息

if(ngx_add_inherited_sockets(&init_cycle)!=ngx_ok){

}

内存池nginx是通过资源集中管理的方式管理资源的,即打开所有即将要用的资源,以备随时取用,无论是文件还是内存

这样做的好处是避免了每次创建、打开资源造成的性能消耗

因此,便有了内存池模块,用来集中申请内存资源并进行内存资源的管理和分配

u_char*last;//当前内存分配的结束位置

u_char*end;//内存池的结束位置

ngx_pool_t*next;//下一内存池

ngx_uint_tfailed;//内存分配失败计数

Nginx中基本的内存池初始化怎么配置,nginx内存配置

size_tmax;//待分配内存大小

ngx_pool_t*current;//指向当前内存池起始位置

ngx_pool_large_t*large;//指向大块内存分配

ngx_pool_cleanup_t*cleanup;//析构函数

ngx_log_t*log;//内存分配相关的log

};//}}}

在这个函数中,使用了一个封装好的函数ngx_memalign,这个函数是对系统中按照数据对齐方式分配内存的函数的封装,在不同的系统中实现方式不同,通过宏定义,实现了操作系统的适配,这是一个很漂亮的技巧

#if(ngx_have_posix_memalign)

//void*ngx_memalign(size_talignment,size_tsize,ngx_log_t*log)

//用数据对齐的方式进行内存分配{{{

ngx_memalign(size_talignment,size_tsize,ngx_log_t*log)

//size单位是byte而不是bit

err=posix_memalign(&p,alignment,size);

ngx_log_error(ngx_log_emerg,log,err,

"posix_memalign(%uz,%uz)failed",alignment,size);

ngx_log_debug3(ngx_log_debug_alloc,log,0,

"posix_memalign:%p:%uz@%uz",p,size,alignment);

//void*ngx_memalign(size_talignment,size_tsize,ngx_log_t*log)

//用数据对齐的方式进行内存分配{{{

ngx_memalign(size_talignment,size_tsize,ngx_log_t*log)

所有有关内存分配的系统调用函数的封装都定义在ngx_alloc.c文件中

这里用到了posix_memalign系统调用,使用这个系统调用分配出来的内存是默认按照第二个参数的大小对齐的,这样在进行数据读写的时候,cpu可以周期地对整块数据进行读写,很大程度的节省了cpu时间

这个系统调用所分配的内存也是存在于堆内存中的,可以使用free函数进行释放,不过malloc分配的内存默认也是对齐的,它相对于malloc的优势仅仅在于可以指定默认对齐大小。函数完成了内存池的初步分配,执行后pool取值:

$23=(ngx_pool_t*)0x80fe9f0

log=0x80e3020<ngx_log>

以上就是Nginx中基本的内存池初始化怎么配置的详细内容,更多请关注主机测评网其它相关文章!

标签:
consul多数据中心作用
« 上一篇
返回列表
下一篇 »

如本文对您有帮助,就请抽根烟吧!