Node.js在Ubuntu中的资源占用情况及监控方法
Node.js在Ubuntu系统中的资源占用(CPU、内存)主要取决于应用类型(I/O密集型/ CPU密集型)、业务逻辑复杂度及并发请求量。I/O密集型应用(如API网关、数据库代理)通常内存占用较低(数百MB至1-2GB),CPU利用率随并发请求数波动;CPU密集型应用(如实时视频处理、复杂数学计算)可能出现单线程瓶颈,导致CPU占用飙升(甚至100%),需通过集群模式优化。
top -p <PID>或htop过滤出Node.js进程(名称通常为node),快速定位资源占用高的应用。vmstat 1每秒输出系统虚拟内存、CPU上下文切换、IO等待等指标,iostat -x 1监控磁盘IO利用率,帮助判断资源瓶颈是否由磁盘或内存引起。sar -u 1 3收集并报告CPU使用率、内存使用情况的平均值(1秒采样,共3次),适合长期监控系统性能趋势。process.memoryUsage()获取内存详情(RSS:常驻内存集、HeapTotal/HeapUsed:堆内存总量/已用、External:外部内存如Buffer),process.cpuUsage()获取CPU时间(用户态+内核态),定期打印或写入日志可跟踪资源变化。pm2 monit)、日志管理(pm2 logs)及自动重启(--watch)。通过pm2 list查看各Node.js进程的CPU、内存占用率及运行状态,适合生产环境使用。--max-old-space-size参数调整(如node --max-old-space-size=2048 app.js设置为2GB),避免因内存不足导致进程崩溃。heapdump模块生成堆快照(heapdump.writeSnapshot('/tmp/heapdump.heapsnapshot')),通过Chrome DevTools分析内存增长原因(常见原因:全局变量未释放、闭包引用、定时器未清除);定期调用global.gc()手动触发垃圾回收(仅限调试环境)。fs.readFileSync),使用异步API(如fs.readFile、async/await),防止阻塞事件循环。child_process.fork())或使用Worker Threads,避免占用主线程导致事件循环延迟。