nginx--共享内存使用详解

本文详细介绍了如何在nginx配置文件中设置共享内存,并解释了在nginx进程初始化时如何为共享内存分配内存。此外,文章还探讨了共享内存的slab管理机制,包括分配和删除操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        参考ngin官方模块对于共享内存的使用,可以在配置文件中对共享内存进行配置

        

{
	  ngx_string("srs_request_node_zone"),
      NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
      ngx_http_srs_request_node_zone,
      0,
      0,
      NULL
},
如上代码,配置参数为共享内存信息配置

 srs_request_node_zone zone=test:400M;

这个配置说明配置一个名为test的400M大小的共享内存,在初始化模块的时候,会调用 ngx_http_srs_request_node_zone进行配置(主要看注释的代码):

static char *
ngx_http_srs_request_node_zone(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {

	u_char                            *p;    
	ssize_t                            size;    
	ngx_str_t                         *value, name, s;       
	ngx_shm_zone_t                    *shm_zone;    
	ngx_http_srs_hook_ctx_t           *ctx;


	ctx = ngx_pcalloc(cf->pool, sizeof(ngx_http_srs_hook_ctx_t));    
	if (ctx == NULL) {        
		return NGX_CONF_ERROR;    
	}
	
	value = cf->args->elts;  //获取配置的参数,有两个一个是配置名srs_request_node_zone , 一个是配置的参数zone=test:400M

	size = 0;    
	name.len = 0;

	if (ngx_strncmp(value[1].data, "zone=", 5) == 0)    //对配置解析获取共享内存名和大小
	{            
		name.data = value[1].data + 5;           
		p = (u_char *) ngx_strchr(name.data, ':');            
		if (p == NULL) 
		{                
			ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"invalid zone size \"%V\"", &value[1]);                
			return NGX_CONF_ERROR;           
		}            
		name.len = p - name.data;            
		s.data = p + 1;            
		s.len = value[1].data + value[1].len - s.data;            
		size = ngx_parse_size(&s);            
		if (size == NGX_ERROR) 
		{                
			ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"invalid zone size \"%V\"", &value[1]);                
			return NGX_CONF_ERROR;            
		}            
		if (size < (ssize_t) (8 * ngx_pagesize)) 
		{                
			ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"zone \"%V\" is too small", &value[1]);                
			return NGX_CONF_ERROR;            
		}
	}
	else
	{
		ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值