php-fpm信號(hào),你造么?

《我是程序媛》系列,這是由一次故障引發(fā)的,對(duì)php-fpm信號(hào)的學(xué)習(xí),不關(guān)注故障的同學(xué)可直接跳到漲姿勢(shì)的部分。

故障回顧

故障時(shí)間:2017-02-25 周六 08:56-10:20左右
故障現(xiàn)象:app找房不可用,后臺(tái)502
暴露問(wèn)題:沒(méi)有報(bào)警,沒(méi)有健康檢查,沒(méi)有兜底,沒(méi)有降級(jí)

故障恢復(fù)

運(yùn)維同學(xué)說(shuō):“標(biāo)準(zhǔn)流程,重啟!” 就 T_T了 (一會(huì)再說(shuō)這的問(wèn)題)

故障原因

  1. 周六之前在監(jiān)控系統(tǒng)觀察,發(fā)現(xiàn)每天凌晨都有502的問(wèn)題;
  2. 所以查了下發(fā)現(xiàn)每天三點(diǎn)都有重啟的動(dòng)作(截圖如下);
![Uploading 2_457422.png . . .]
  1. 修改restart為reload;
  2. reload腳本有bug,信號(hào)發(fā)錯(cuò),導(dǎo)致master進(jìn)程被干掉,子進(jìn)程2048個(gè)請(qǐng)求后,自動(dòng)退出了(so,3點(diǎn)的動(dòng)作8點(diǎn)多才出現(xiàn)問(wèn)題,截圖如下);
2.png

漲姿勢(shì)

功能:重新打開(kāi)日志
作用:提供了一種手段,防止單個(gè)日志文件過(guò)長(zhǎng)
執(zhí)行步驟:
1、 master進(jìn)程重新打開(kāi)error_log,error_log是全局log,所有pool共享
2、 master進(jìn)程重新打開(kāi)每個(gè)pool的access_log,同一個(gè)pool中的子進(jìn)程會(huì)寫入同一個(gè)access_log
3、 master通過(guò)給子進(jìn)程發(fā)送SIGQUIT信號(hào)的方式,平滑關(guān)閉所有的子進(jìn)程
4、 每個(gè)worker退出后,master會(huì)重新fork子進(jìn)程
為什么要關(guān)閉所有的子進(jìn)程呢?因?yàn)閙aster進(jìn)程重新打開(kāi)access_log日志文件,只是對(duì)master有效,只有重啟子進(jìn)程,子進(jìn)程才能真正的感知到access_log的變化,才能寫到新的日志里面

  - SIGUSR2信號(hào)

功能:重啟fpm,包括master和worker
作用:就是為了重啟
執(zhí)行步驟:
1、 master通過(guò)給子進(jìn)程發(fā)送SIGQUIT信號(hào)的方式,平滑關(guān)閉所有的子進(jìn)程
2、 如果過(guò)一段時(shí)間,有些子進(jìn)程還沒(méi)退出,給子進(jìn)程發(fā)送SIGTERM信號(hào),強(qiáng)制關(guān)閉子進(jìn)程
3、 如果還沒(méi)關(guān)閉,給子進(jìn)程發(fā)送SIGKILL信號(hào),強(qiáng)制關(guān)閉
4、 等所有的子進(jìn)程退出后,master重新啟動(dòng)

  - SIGQUIT信號(hào)

功能:平滑關(guān)閉fpm
作用:關(guān)閉fpm,不影響正在處理的請(qǐng)求,等處理完正在處理的請(qǐng)求后,子進(jìn)程才退出
執(zhí)行步驟:
1、 Master通過(guò)給子進(jìn)程發(fā)送SIGQUIT信號(hào)的方式,關(guān)閉所有的子進(jìn)程
2、 如果過(guò)一段時(shí)間,有些子進(jìn)程還沒(méi)退出,給子進(jìn)程發(fā)送SIGTERM信號(hào),強(qiáng)制關(guān)閉子進(jìn)程
3、 如果還沒(méi)關(guān)閉,給子進(jìn)程發(fā)送SIGKILL信號(hào),強(qiáng)制關(guān)閉
4、 等所有的子進(jìn)程退出后,master退出
為什么叫平滑關(guān)閉?因?yàn)閙aster和worker都對(duì)SIGQUIT進(jìn)行了處理,master收到SIGQUIT信號(hào)時(shí),它也會(huì)給worker發(fā)SIGQUIT信號(hào),worker對(duì)SIGQUIT信號(hào)的處理方式就是,處理完手頭的活兒才關(guān)閉,所以不影響當(dāng)前請(qǐng)求

  - SIGTERM/SIGINT信號(hào)

功能:強(qiáng)制關(guān)閉fpm
作用:關(guān)閉fpm,方法暴力,會(huì)影響當(dāng)前請(qǐng)求
執(zhí)行步驟:
1、 master通過(guò)給子進(jìn)程發(fā)送SIGTERM信號(hào)的方式關(guān)閉子進(jìn)程
2、 如果過(guò)一段時(shí)間,有些子進(jìn)程沒(méi)關(guān)閉,master給子進(jìn)程發(fā)送SIGKILL信號(hào),強(qiáng)制關(guān)閉
3、 等所有子進(jìn)程退出后,master退出
為什么叫暴力退出?因?yàn)閣orker進(jìn)程沒(méi)有處理SIGTERM和SIGKILL信號(hào),當(dāng)收到master發(fā)來(lái)的這些信號(hào)后,子進(jìn)程會(huì)被os直接干掉。

注意:fpm對(duì)外只處理了上面5個(gè)信號(hào),所有其他信號(hào)都采用默認(rèn)行為,默認(rèn)行為有可能會(huì)導(dǎo)致master直接退出。其他參見(jiàn)源碼 https://github.com/php/php-src/blob/e3feeba3aedd8e4347fefa315effd7d4f9fa0ca1/sapi/fpm/fpm/fpm_signals.c

老司機(jī)經(jīng)驗(yàn)

  • 啟動(dòng)腳本一定要從官方下載,運(yùn)維小哥別自己搞了;
  • 發(fā)生故障,千萬(wàn)別重啟,而是摘機(jī)器,保留現(xiàn)場(chǎng);
  • 核心業(yè)務(wù)一定要多機(jī)器,以免發(fā)生問(wèn)題,只有兩臺(tái),摘掉一臺(tái)又怕扛不??;
  • 所有研發(fā)一定要對(duì)自己的系統(tǒng)特別了解,跑了什么?怎么跑的?配置是什么?日志在哪里?
  • 每次故障都要復(fù)盤清楚,不要不了了之(接下來(lái):運(yùn)維去測(cè)試下,日志切割不用動(dòng)php看行不行;運(yùn)維加對(duì)php-fpm的監(jiān)控);
  • 報(bào)警(以后業(yè)務(wù)報(bào)警研發(fā)加,系統(tǒng)級(jí)報(bào)警運(yùn)維加);
  • 健康檢查(這次nginx的故障轉(zhuǎn)移只加了500,503,404,所以502的出了問(wèn)題);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文github地址 1.PHP概述 1.1 PHP的歷史發(fā)展 1995年由Lerdorf創(chuàng)建PHP,高級(jí)腳本語(yǔ)言...
    10xjzheng閱讀 1,572評(píng)論 0 2
  • Nginx的工作原理 1.Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成,其中,內(nèi)核的設(shè)計(jì)非常微小和簡(jiǎn)潔,...
    架構(gòu)飛毛腿閱讀 6,312評(píng)論 1 27
  • 在實(shí)際的開(kāi)發(fā)和應(yīng)用中偶發(fā)的502,504讓人頭痛,下面轉(zhuǎn)發(fā)一個(gè)寫的比較全面的。 PHP-fpm PHP-FPM是一...
    daos閱讀 2,537評(píng)論 2 18
  • php7基礎(chǔ)邏輯 worker進(jìn)程 進(jìn)程管理方式 static:?jiǎn)?dòng)master的時(shí)候按照pm.max_child...
    影帆閱讀 682評(píng)論 0 1
  • 幾天沒(méi)有更新了,相對(duì)于前段時(shí)間的日更,這算是長(zhǎng)草的節(jié)奏了。 因?yàn)樽罱行┦虑?,關(guān)于離別的,關(guān)于工作的,關(guān)于家庭的,...
    虎雅彬閱讀 303評(píng)論 0 0

友情鏈接更多精彩內(nèi)容