nginx日志采集系列(三)-nginx运行进程数
内容提要
本文讨论了在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仍然可以正常工作。