Nginx `worker_processes`多进程共享缓存与内存数据同步机制

千强酱_5440

千强酱_5440

2026-09-20

319人浏览

原创

nginx worker进程通过master预分配的mmap共享内存实现数据共享,各worker以字节偏移寻址,依赖原子操作(如ngx_atomic_t)和轻量锁同步;共享内存仅存元数据(如缓存key、ssl会话),响应体另存;协同采用“写隔离+乐观更新”,非强一致。

nginx `worker_processes`多进程共享缓存与内存数据同步机制

Nginx 的 worker_processes 本身不共享内存或缓存——每个 worker 是独立进程,地址空间隔离。所谓“共享”,是靠 master 进程在启动时预分配一块物理内存(通过 mmap(MAP_SHARED | MAP_ANONYMOUS)),再由 fork 继承,使所有 worker 映射到同一块共享内存区域;数据同步则依赖原子操作与轻量锁,而非进程通信。

共享内存不是自动同步,而是统一映射 + 偏移寻址

master 进程启动时调用 ngx_shm_alloc() 分配匿名共享内存,大小由配置中的 zone 指令决定(如 limit_req_zone ... zone=ip_limit:10m)。fork 后各 worker 进程获得该内存的映射权限,但虚拟地址可能不同。Nginx 内部一律使用**字节偏移量**定位字段,避免指针失效。这块内存生命周期由 master 管理,worker 退出不释放,reload 时默认清空(除非 zone 配置未变)。

计数器靠原子类型,不依赖锁

高频更新的状态(如请求数、令牌桶余量、活跃连接数)必须用 ngx_atomic_t 类型,底层调用 CPU 原语(如 x86 的 LOCK XADD),全程用户态完成,无上下文切换:

Nginx Config Linter
Nginx Config Linter

对 Nginx 配置文件进行语法检查、验证和安全、性能审计。

下载
  • limit_req 中每个 IP 对应的令牌数,是 ngx_atomic_uint_t 字段,worker 直接原子增减;
  • stub_statusnginx_stub_status_active 等指标,各 worker 并发原子累加,不会丢值;
  • 切忌在 Lua 中对同一 key 多次调用 incr(),或在 C 模块中直接写 counter++——前者因浮点精度截断导致统计偏低,后者非原子,必然竞争出错。

缓存只存元数据,响应体另存别处

Nginx 不把完整响应体塞进共享内存,而是仅存放控制信息:

  • proxy_cachefastcgi_cache 的 key 索引、过期时间、状态标记(valid/expired)等元数据放共享内存,减少磁盘查找;
  • ssl_session_cache shared:SSL:50m 存储会话 ID 与加密参数,复用时直接查共享区,跳过 TLS 握手;
  • 所有条目由 slab 分配器管理,插入/删除需短暂获取 ngx_shmtx_t 自旋锁,临界区极短(仅操作红黑树节点或哈希桶)。

协同逻辑是“写隔离 + 乐观更新”,不是强一致

不同模块利用 zone 实现弱一致性,核心思路是降低争抢而非强制同步:

  • limit_req:每个 worker 先查本地滑动窗口,额度不足时才尝试原子扣减共享 zone 配额,失败即拒绝;
  • lua_shared_dict:提供 incrset(key, val, exptime) 等原子方法,适合日粒度计数或用户频控;
  • upstream 健康检查:启用 zone backend_zone 64k 后,所有 worker 共享后端节点的 up/down 状态、失败次数、当前连接数,避免因状态隔离误发请求。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

nginx 同步机制

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

397

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

820

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2312

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

796

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

669

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

354

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2076

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

3792

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

627

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习