nginx【25】用好共享内存的工具 Slab管理器

刚刚我们谈到nginx不同的worker进程间需要共享信息的时候,需要通过共享内存;我们也谈到了共享内存上可以使用链表或者红黑树这样的数据结构;但是每一个红黑树上有许多节点;每一个节点你都需要分配内存去存放;那么怎么样把一整块共享内存切割成一小块给红黑树上的每一个节点使用尼/p>

下面我们来看下Slab内存分配管理是怎么样应用于共享内存上的;首先我们来看下Slab内存管理是怎么样的一种形式;

nginx【25】用好共享内存的工具 Slab管理器
比如说:8字节 16 字节 。。。。等等;

一共目前分配了多少,使用了多少,有多少个请求在访问,失败了多少次,这个对我们来监控Slab是非常有用处的;

下面我们来看下怎么样在openresty的场景下去使用tng上的slab_stat这个模块;

首先我们打开tengine的页面 http://tengine.taobao.org/document/ngx_slab_stat.html

但是会发现在这个模块上没有github的地址;也就是说它没有作为一个独立的模块提供出来;那这个时候该怎么办尼/p>

那么tengine怎么下载下来download里;

nginx【25】用好共享内存的工具 Slab管理器

可以看到这是一个标准的nginx第三方模块;因为每一个nginx第三方模块会通过一个文件定义好我们之前所说的ngx_module_t这么一个结构体;

以及处理哪些配置项 ,提供哪些变量;并有一个来帮助他编译到我们的目标nginx中 ;现在我们再回到 中,让编译的时候,把的模块编译进去;然后再使用openresty上的share_direct去分配共享内存;再用slab_stat查看我们共享内存的使用情况;

我们执行configure的时候,可以添加一个参数叫 ;–add-module=这个命令尼 可以将一个目录下具备config的这样一个配置项或者目录添加到我们的nginx中,它的方式尼 也就是将这个模块的nginx源码能够使我们的 识别到;所以这里的configure和我们的官方configure是一样的,那么我们现在开始编译openresty;

如果之前已经安装了openresty或者(nginx)

执行编译make 好以后不需要make install

(1):备份原来的nginx 可执行文件

(2):将编译好的 nginx 可执行二进制文件复制到原始 nginx 的 sbin 目录

(3):验证是否成功安装 ngx_slab_stat

现在openresty已经安装完成了,这个openresty中,已经包含了模块;

我们以上一节中 那段代码的例子,来讲解下是怎么使用的/p>

首先我们用 dogs 10m; 分配了一个10m的共享内存,名字叫;

使用的话,我们有一个set的url下;设置了一个:Jim-8;设置在我们的共享内存下;并返回给用户一个字符串叫STORED;

当收到get这个url请求时,会从dogs 共享内存中取出Jim的值;也就是这里设置的8返回给用户;

然后我们又增加了一个location;这个叫做;它里面的内容尼就是中提供的slab_stat配置项,这个配置项就叫做;

它会返回我们slab的所有的统计状况;

nginx.conf 配置文件代码:

配置项写完,把ngixn启动看看它的执行效果;

每一个slot及其slot对应的大小;分配了多少个,使用了多少个,失败了多少个;

所谓分配就是10m是一个非常大的共享内存,它会划分很多个页面;对于比较小的比如32字节,一个页面可以有128个;这里127可用,已经使用了一个;

nginx【25】用好共享内存的工具 Slab管理器 爱死亡机器人 nginx【25】用好共享内存的工具 Slab管理器 微信公众号 nginx【25】用好共享内存的工具 Slab管理器 爱技术、爱搬砖、爱斜杠…..

来源:ghostwritten

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月20日
下一篇 2022年1月20日

相关推荐