nginx–基础–18–内存池
1、架构
- 提前分配内存,不等到需要内存的时候才分配
- 减少内存碎片
- 每次连接使用小内存的时候,它会使用next指针将他们全部连接起来,再次使用内存很少的时候,再分配一小块内存,这些内存会是连续的,这样就大大的减少了内存碎片。
- 大块内存通过alloc来开辟内存空间的
2、对nginx有什么好处呢?
每当有一个tcp连接的时候,这个tcp连接可能存在着很多的http请求,也就是说有http的请求连接一直没有关闭。
- 每一次http的请求都会分配内存,如果没有内存池,需要频繁的分配,频繁的分配内存是需要付出代价的。当时有内存次的话,一个tcp连接就只会分配一次,在这个tcp里面的http都会共用分配内存。 只要这个tcp连接不关闭,这内存我永远不需要释放,直到连接关闭的时候才会释放。
3、分类
3.1、请求内存池(request_pool_size)
-
默认:4k
-
需要保存大量的上下文的信息,如
- 所有读取到的URL或者head信息,需要一直保存着。
- URL通常都比较长的,所以我们需要有4k的大小。
-
官方文档说,它对性能的影响很小,如果你的URL通常都特别长的那种,可以考虑把这调整大些。如果你的URL和head很小也可以调小点,这样也会提高点性能,能做更大的并发量。
3.2、连接内存池(connection_pool_size)
- 默认:256
- 当我们分配的内存超过了这个预分配大小的时候,它会继续分配的内存。
- 用于减少内核对于小块内存的分配次数
- 配置太大会增加服务器内存消耗,太小会增加服务器内存分配次数。