广告
返回顶部
首页 > 资讯 > 精选 >nginx平滑重启和FPM平滑重启是什么
  • 940
分享到

nginx平滑重启和FPM平滑重启是什么

2023-06-29 10:06:39 940人浏览 安东尼
摘要

本篇内容主要讲解“Nginx平滑重启和FPM平滑重启是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“nginx平滑重启和FPM平滑重启是什么”吧!平滑重启GR是Graceful Restar

本篇内容主要讲解“Nginx平滑重启和FPM平滑重启是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“nginx平滑重启和FPM平滑重启是什么”吧!

平滑重启

GR是Graceful Restart(平滑重启)的简称,是一种在协议重启时保证转发业务不中断的机制。
GR机制的核心在于:当某设备进行协议重启时,能够通知其周边设备在一定时间内将到该设备的邻居关系和路由保持稳定。在协议重启完毕后,周边设备协助其进行信息(包括支持GR的路由/MPLS相关协议所维护的各种拓扑、路由和会话信息)同步,在尽量短的时间内使该设备恢复到重启前的状态。在整个协议重启过程中不会产生路由振荡,报文转发路径也没有任何改变,整个系统可以不间断地转发数据。这个过程即称为平滑重启。

nginx平滑重启

nginx进程分为master主进程和worker工作进程,nginx的平滑重启通过信号HUB控制。

nginx平滑重启和FPM平滑重启是什么

注:在POSIX兼容的平台上,SIGUSR1和SIGUSR2是发送给一个进程的信号,它表示了用户定义的情况。

为了详细分析nginx的平滑重启过程,我们持续监控nginx进程变化。
发送HUP信号

kill -HUP `cat /home/git/nginx/logs/nginx.pid`

nginx平滑重启和FPM平滑重启是什么

nginx平滑重启和FPM平滑重启是什么

nginx平滑重启和FPM平滑重启是什么

通过观察,可以分析出大致的平滑重启过程为:
1. master使用新配置 fork出n-1个worker及新master
2. 新worker处理新情求,旧worker执行完退出
3. master重新加载配置,期间使用新master接管服务
4. master加载配置完毕,新master切换为worker工作模式
平滑重启完,master进程号并不会发生变化。

nginx平滑升级

HUP仅用于平滑重启,加载配置等,如果要平滑升级nginx版本,重新加载编译的二进制文件,需要借助于USR2信号。

发送USR2信号

kill -USR2 `cat /home/git/nginx/logs/nginx.pid`

nginx平滑重启和FPM平滑重启是什么

nginx平滑重启和FPM平滑重启是什么

观察到nginx进程,fork出新master及worker,此时nginx.pid内容已经发生变化,并且在logs目录下生成了nginx.pid.oldbin文件,记录旧master pid.

向旧master发送WINCH信号,nginx woker会优雅地停止服务,即:停止接收新的请求,但是不会终止已经在处理的请求。一段时间后,旧nginx的所有worker进程全部退出,只剩下master进程,而用户请求全部都由新的nginx进程处理。

kill -WINCH `cat /home/git/nginx/logs/nginx.pid.oldbin`

nginx平滑重启和FPM平滑重启是什么

向旧master发送QUIT信号,旧nginx进程完全退出,至此平滑升级完成。

kill -QUIT `cat /home/git/nginx/logs/nginx.pid.oldbin`

nginx平滑重启和FPM平滑重启是什么

FPM平滑重启

FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,php5.3.3之后已经集成FPM,在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。

FPM的平滑重启需要通过USR2信号控制,不过与nginx的平滑重启过程有较大的不同。

kill -USR2 `cat /home/git/php/var/run/php-fpm.pid`

nginx平滑重启和FPM平滑重启是什么

通过持续观察fpm进程可以看到,FPM平滑重启,需要等子进程完全退出后,才会启动新的master及子进程,随后旧master退出。
使用strace进一步分析

nginx平滑重启和FPM平滑重启是什么

发现master通知所有子进程退出,包含正在处理请求的子进程。

为了进一步验证这个结论,编写一个服务端sleep脚本

<?phpexec("sleep 5");echo 'done';

用浏览器请求这个地址,并在此期间平滑重启fpm,请求直接502了。
nginx错误日志

[error] 29841#0: *1646 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /test.php Http/1.1", upstream: "fastcgi://127.0.0.1:9001", host: "localhost"

php bug#60961,也有对fpm无法优雅的实现平滑重启的说明。
难道FPM这么low?答案当时是no,实际上通过 process_control_timeout 参数可以实现我们的目标。

process_control_timeout

设置子进程接受主进程复用信号的超时时间。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。

原则上,php-fpm会选择空闲的fastcgi进程去处理请求,在处理之前,php-fpm会给fastcgi发送信号,用来让fastcgi进程准备好接受请求处理。但是fastcgi进程并不总是能够处理请求,也就是不能总是响应该信号(比如出现假死的情况),这时候就需要设定php-fpm留给fastcgi进程响应信号的时间,如果超时了,php-fpm会想其他办法(例如选择其他fastcgi进程),这个就是process_control_timeout参数的作用。

这个参数缺省是 0,也就是不生效,修改为10,重新验证,502已经不会再出现。

到此,相信大家对“nginx平滑重启和FPM平滑重启是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: nginx平滑重启和FPM平滑重启是什么

本文链接: https://www.lsjlt.com/news/324401.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • nginx平滑重启和FPM平滑重启是什么
    本篇内容主要讲解“nginx平滑重启和FPM平滑重启是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“nginx平滑重启和FPM平滑重启是什么”吧!平滑重启GR是Graceful Restar...
    99+
    2023-06-29
  • nginx平滑重启和平滑升级的方法是什么
    今天小编给大家分享一下nginx平滑重启和平滑升级的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。nginx平滑重...
    99+
    2023-06-26
  • 重启 php-cgi;重启 php-fpm;平滑重启原理
    重启 php-cgi;重启 php-fpm;平滑重启原理 第一种方式: 启动php-fpm /usr/local/php/sbin/php-fpm start 注:php-fpm包括其他参数:star...
    99+
    2023-09-10
    php 运维
  • nginx平滑重启和平滑升级的图文教程
    目录nginx平滑重启平滑重启主要流程图解nginx平滑升级平滑升级主要流程图解总结nginx平滑重启 如果修改了nginx的配置文件(nginx.conf),想要重启nginx,可...
    99+
    2022-11-13
  • golang怎么平滑重启
    在前端开发,后端开发以及 DevOps 领域中,平滑重启是一项非常重要的技术。当应用程序需要更新而不希望中断现有请求时,平滑重启可使更新过程更加顺畅。在 Golang 中,平滑重启是一种相对较新的技术,但是随着 Golang 受到更多关注,...
    99+
    2023-05-14
  • PHP怎么实现平滑关闭和重启
    本篇内容介绍了“PHP怎么实现平滑关闭和重启”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!原理要实现平滑关闭/重启不难,这里先讲解两个知识点...
    99+
    2023-06-30
  • nginx 平滑重启与升级的实现方法分享
    有时候我们需要平滑重启nginx服务,防止出现问题,这里简单的总结,方便需要的朋友如果改变了Nginx的配置文件(nginx.conf),想重启Nginx,同样可以通过发送系统信号给Nginx主进程的方式来进行.不过,重启之前,要确认Ngi...
    99+
    2023-06-05
  • Golang怎么创建守护进程和平滑重启
    本篇内容介绍了“Golang怎么创建守护进程和平滑重启”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1)生成守护进程直接上代码:packag...
    99+
    2023-06-20
  • PHP平滑关闭/重启的实现方法
    目录前言原理阻塞信号处理信号拼起来思考前言 写过 CLI 常驻进程的老司机肯定遇到过这么一个问题:在需要更新程序的时候,我要怎样才能安全关闭老进程?你可能会想到 NGINX...
    99+
    2022-11-13
  • Golang如何创建守护进程以及平滑重启
    这篇文章主要介绍了Golang如何创建守护进程以及平滑重启,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法如下1)生成守护进程直接上代码:package main...
    99+
    2023-06-15
  • Go项目实现优雅关机与平滑重启功能
    目录前言什么是优雅关机?实现原理实现优雅重启实现平滑重启测试总结前言 优雅关机就是服务端关机命令发出后不是立即关机,而是等待当前还在处理的请求全部处理完毕后再退出程序,是一种对客户端...
    99+
    2022-11-11
  • Nginx生产环境平滑升级的方法是什么
    这篇“Nginx生产环境平滑升级的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Nginx生产环境平滑升级的方法是...
    99+
    2023-07-05
  • 如何解决Go语言中的并发任务的优雅停机和平滑重启问题?
    如何解决Go语言中的并发任务的优雅停机和平滑重启问题?在Go语言中,我们经常会遇到需要处理并发任务的情况。然而,并发任务的停机和重启可能会造成资源泄漏或数据丢失等问题。为了解决这些问题,我们需要采用一些优雅的停机和平滑重启的方法。一、优雅停...
    99+
    2023-10-22
    并发任务 优雅停机 平滑重启
  • linux中重启和关闭系统命令是什么
    这篇文章主要介绍了linux中重启和关闭系统命令是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。重启命令:rebootshutdown -r now 立刻重启(root用...
    99+
    2023-06-09
  • Docker查询、停止、删除和重启容器的方法是什么
    本文小编为大家详细介绍“Docker查询、停止、删除和重启容器的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Docker查询、停止、删除和重启容器的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-05
  • VNPY重新启动后没有停止挂单原因和解决方法是什么
    本篇文章为大家展示了VNPY重新启动后没有停止挂单原因和解决方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。之前在这个链接里面,提了vnpy重启后,比如开盘前开始,即使符合挂单条件,也没有挂...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作