最近運維老大j哥找到我說了一個事兒:某私有化部署的線上環境nodejs進程數量多達1000+,對比公版線上環境的66個進程數顯得十分詭異。而且單個nodejs進程所佔用swap空間也較大,也不釋放空間,日積月累下來是一個隱患。html
個人debug過程比較順暢,記錄下來以備有一樣煩惱者借鑑。node
先用top命令發現,系統Task數量高達1300+,而後使用命令:npm
ps -ef | grep node | wc -l
統計出有1306個進程bash
用ps -ef | grep node 查看進程列表運維
發現全是:spa
問題緣由:線程
這是npm的一個更新包機制的服務。這些進程一直未釋放,因此就致使了Task數太高,因爲nodejs進程數超過了最大系統線程池數量,由此可能形成以前request包請求的時候報escokettimeout.debug
check.js中對若是不能更新成功則子進程一直存活的邏輯,是形成這些進程一直不exit的緣由。華西項目是私有化部署在內網中,沒法連到外網拉取到更新,因此會一直生成進程而不中止。code
解決辦法:htm
先殺死相關 node check.js的進程
pgrep -a node|awk '{print $1}'|xargs kill -9
而後處理更新。
只要讓這個更新操做不執行便可,有以下方法:
1.移除check.js文件便可。
2.在npm相關設置中設置不自動更新參數。(NO_UPDATE_NOTIFIER)