update_notifier 造成nodejs进程数量增长的问题
最近運維老大j哥找到我說了一個事兒:某私有化部署的線上環境nodejs進程數量多達1000+,對比公版線上環境的66個進程數顯得十分詭異。并且單個nodejs進程所占用swap空間也較大,也不釋放空間,日積月累下來是一個隱患。
我的debug過程比較順暢,記錄下來以備有同樣煩惱者借鑒。
?
先用top命令發現,系統Task數量高達1300+,然后使用命令:
?
ps -ef | grep node | wc -l?
?
統計出有1306個進程
用ps -ef | grep node 查看進程列表
?
發現全是:
?
?
?
問題原因:
這是npm的一個更新包機制的服務。這些進程一直未釋放,所以就導致了Task數過高,由于nodejs進程數超過了最大系統線程池數量,由此可能造成之前request包請求的時候報escokettimeout.
?
check.js中對如果不能更新成功則子進程一直存活的邏輯,是造成這些進程一直不exit的原因。華西項目是私有化部署在內網中,無法連到外網拉取到更新,所以會一直生成進程而不停止。
?
?
解決辦法:
先殺死相關 node check.js的進程
?
pgrep -a node|awk '{print $1}'|xargs kill -9?
然后處理更新。
?
只要讓這個更新操作不執行即可,有如下方法:
1.移除check.js文件即可。
2.在npm相關設置中設置不自動更新參數。(NO_UPDATE_NOTIFIER)
參考資料:https://www.codercto.com/a/26526.html
轉載于:https://www.cnblogs.com/freephp/p/10729302.html
總結
以上是生活随笔為你收集整理的update_notifier 造成nodejs进程数量增长的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019.4.17 映纷创意首页铺设练习
- 下一篇: ubuntu18.04(bionic)