国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

Node.js 進(jìn)程平滑離場(chǎng)剖析小結(jié)

2024-05-06 15:42:53
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

使用 Node.js 搭建 HTTP Server 已是司空見(jiàn)慣的事。在生產(chǎn)環(huán)境中,Node 進(jìn)程平滑重啟直接關(guān)系到服務(wù)的可靠性,它的重要性不容我們忽視。既然是平滑重啟,就涉及到新舊進(jìn)程的接替過(guò)渡:

首先,保證新進(jìn)程平滑入場(chǎng) 其次,保證舊進(jìn)程平滑離場(chǎng)

本文主要談?wù)撓拢谛屡f進(jìn)程接替過(guò)渡期間,如何保證舊進(jìn)程平滑離場(chǎng)。那怎樣的離場(chǎng)才算平滑的呢?

如何定義平滑離場(chǎng)

以進(jìn)程離場(chǎng)作為時(shí)間分割點(diǎn),我們可以把請(qǐng)求分為兩類:增量請(qǐng)求存量請(qǐng)求

在進(jìn)程離場(chǎng)前,停止接收新的(增量)請(qǐng)求 在進(jìn)程離場(chǎng)前,保證未完成的(存量)請(qǐng)求正常響應(yīng)

所以,達(dá)成以上兩個(gè)目標(biāo),基本上我們就認(rèn)為進(jìn)程的離場(chǎng)是平滑的。在談如何做到進(jìn)程平滑離場(chǎng)前,我們需要一種機(jī)制,這種機(jī)制能讓我們主動(dòng)通知進(jìn)程何時(shí)離場(chǎng),這就涉及到進(jìn)程間通信(IPC)的知識(shí)了,我們先簡(jiǎn)單了解下。

進(jìn)程間通信

對(duì) Unix 或類 Unix 系統(tǒng)而言,進(jìn)程間通信的方式有很多種 —— 信號(hào)(Signal)是其中的一種。

信號(hào)的種類有很多,如 SIGINT、 SIGTERM SIGKILL 等。這些信號(hào)視具體需要用于不同的場(chǎng)景,比如 SIGKILL 一般用于強(qiáng)殺進(jìn)程。

我們可以在命令行執(zhí)行 kill -l 查看所有的信號(hào),如下所示(其中的數(shù)字表示 signal number):

$ kill -l 1) SIGHUP   2) SIGINT   3) SIGQUIT   4) SIGILL 5) SIGTRAP   6) SIGABRT   7) SIGEMT   8) SIGFPE 9) SIGKILL  10) SIGBUS  11) SIGSEGV  12) SIGSYS13) SIGPIPE  14) SIGALRM  15) SIGTERM  16) SIGURG17) SIGSTOP  18) SIGTSTP  19) SIGCONT  20) SIGCHLD21) SIGTTIN  22) SIGTTOU  23) SIGIO  24) SIGXCPU25) SIGXFSZ  26) SIGVTALRM  27) SIGPROF  28) SIGWINCH29) SIGINFO  30) SIGUSR1  31) SIGUSR2

我們可以使用 kill 命令向進(jìn)程發(fā)送指定信號(hào):

# 發(fā)送 SIGTERM 信號(hào)(默認(rèn),無(wú)須指定信號(hào)類型)給進(jìn)程$ kill <pid># 發(fā)送 SIGINT 信號(hào)給進(jìn)程,其中 <pid> 為具體的進(jìn)程 ID$ kill -INT <pid># 發(fā)送 SIGKILL 信號(hào)給進(jìn)程$ kill -KILL <pid># 或者$ kill -9 <pid>

進(jìn)程可以對(duì)接收到的信號(hào)作出回應(yīng)。對(duì) Node 應(yīng)用而言,信號(hào)是被當(dāng)作事件發(fā)送給 Node 進(jìn)程的,進(jìn)程接收到 SIGTERM 及 SIGINT 事件有默認(rèn)回調(diào),官方文檔是這么描述的:

'SIGTERM' and 'SIGINT' have default handlers on non-Windows platforms that reset the terminal mode before exiting with code 128 + signal number. If one of these signals has a listener installed, its default behavior will be removed (Node.js will no longer exit).

這句話寫的很抽象,它是什么意思呢?我們以一個(gè)簡(jiǎn)單的 Node 應(yīng)用為例。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 绥江县| 佛坪县| 疏勒县| 德钦县| 水城县| 江津市| 翼城县| 崇左市| 广州市| 泽州县| 绥化市| 保亭| 巴林右旗| 昌邑市| 黄浦区| 南皮县| 长治县| 中超| 亚东县| 吉木萨尔县| 武义县| 临城县| 陈巴尔虎旗| 汶川县| 左贡县| 鄢陵县| 东源县| 五家渠市| 禹城市| 安仁县| 肇源县| 云和县| 鹿邑县| 万州区| 邵阳市| 赤峰市| 马尔康县| 定襄县| 常熟市| 三明市| 孝昌县|