最近运维老大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)