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的进程

 

1
pgrep -a node|awk '{print $1}'|xargs kill -9

 

然后处理更新。

 

只要让这个更新操作不执行即可,有如下方法:

1.移除check.js文件即可。

2.npm相关设置中设置不自动更新参数。(NO_UPDATE_NOTIFIER)

参考资料:https://www.codercto.com/a/26526.html

posted @   freephp  阅读(1517)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示