nginx日志采集系列(三)-nginx运行进程数

💡 原文中文,约2200字,阅读约需6分钟。
📝

内容提要

本文讨论了在nginx.conf文件中配置nginx日志收集的方法,包括设置worker_processes参数控制worker进程数量,编写init_worker_by_lua_block代码实现每个worker进程独立运行,使用ngx.shared共享内存收集日志信息,解释了master进程和worker进程的作用和关系。

🔎

延伸解读

worker进程数量配置的实际影响

文章通过实验展示了worker_processes设置为不同值时的进程数量变化:设置为2时共有3个nginx进程(1个master和2个worker),设置为1时共有2个进程,设置为auto时共有17个进程(对应CPU核心数)。这直观说明了worker进程数量直接由该参数控制,且auto值会根据主机CPU核心数自动设定。读者可据此评估服务器资源与并发处理需求,合理配置worker数量。

master与worker进程的职责与容错表现

根据文章描述,master进程负责创建和管理worker进程,worker进程实际处理请求。当杀死一个worker进程时,日志打印不会消失但会出现滞后,且master会自动创建新的worker进程,新进程的内存数据与已被杀死的相同。而杀死master进程后,不会自动重启master,此时再杀死worker进程也不会补充,nginx仍能正常工作,但无法通过nginx -s stop停止,只能杀掉所有worker进程来终止。这揭示了master的管理角色和worker的独立工作特性。

共享内存与日志收集的协作机制

文章指出,init_worker_by_lua_block中的代码在每个worker进程中独立运行,但读取的内容一致,说明它们访问的是同一块共享内存。log_by_lua_block中通过ngx.shared.log1:rpush将日志写入共享内存列表,而init_worker_by_lua_block中通过lpop读取,由于列表操作是原子性的,多个worker进程可以分别处理日志条目,不会重复工作。这为分布式日志收集提供了一种基于共享内存的协作模式。

❓

Q&A

如何在nginx中配置worker进程数量?

在nginx.conf文件中设置worker_processes参数来控制worker进程数量。

master进程和worker进程的作用是什么?

master进程负责创建和管理worker进程,而worker进程实际处理请求。

init_worker_by_lua_block的作用是什么?

init_worker_by_lua_block用于实现每个worker进程独立运行的逻辑。

使用ngx.shared共享内存有什么好处?

使用ngx.shared共享内存可以有效收集和存储日志信息,避免重复工作。

当worker进程被杀死时,日志会发生什么?

当worker进程被杀死时,日志打印不会消失,但会出现滞后。

nginx的master进程终止后会发生什么?

master进程终止后不会自动重启,nginx仍然可以正常工作。

🏷️

标签

➡️

继续阅读