Node 服务 CPU 高、内存涨、接口慢怎么定位?
先理解原理和示例,再练习完整口述与追问。
回答要点
分 CPU、heap/RSS、事件循环延迟、I/O 和下游;CPU profile、heap snapshot、请求时序;保留现场与脱敏。
原理拆解
接口慢不必然是 Node 执行慢,可能等待数据库、DNS、连接或外部接口。CPU 高可通过 profile 找热点;heap 持续增长看对象保留链;RSS 还包含堆外 Buffer、原生内存和其他开销,不能仅看 heapUsed。事件循环延迟高常表示主线程忙或停顿,需与 GC、同步代码和流量一起关联。
示例与推演
同一请求记录排队、认证、下游、渲染和响应时间。重复请求后内存不回落,比较快照中全局 Map、未解除监听和会话缓存;CPU profile 若集中在 JSON 序列化或正则,再限制输入规模或改变算法。排查压测使用有代表数据,并记录吞吐、尾延迟和错误率。
易错点
heap snapshot 可能暂停进程并包含敏感数据,要在受控环境采集和保存。反复重启只是暂时恢复,不等于查明根因。
参考回答可直接练习口述
我先用指标判断瓶颈类别,关联请求追踪、事件循环、CPU 与内存,再用 profile 或快照验证假设。优化后在同等负载比较尾延迟、资源和错误率,并修复无界缓存、长任务或下游等待的真实原因。