温馨提示×

Node.js 在 CentOS 上如何进行故障排查

小樊
43
2025-12-09 13:04:26
栏目: 编程语言

Node.js 在 CentOS 上的故障排查步骤

一 快速定位与日志收集

  • 查看应用输出与日志:实时跟踪日志,优先使用应用日志文件与标准输出重定向;若通过 systemd 托管,使用 journalctl 查看服务日志。示例:tail -f logs/app.logjournalctl -u your-nodejs-service -f
  • 检查运行环境:确认 Node.js 版本 与依赖一致(node -vnpm -vnpm install),并核对必要的 环境变量 是否设置。
  • 网络连通性:确认端口监听与连通,排查 防火墙/安全组 策略是否阻断访问。
  • 最小化复现:在本地或测试环境用相同代码与数据复现,便于快速定位。

二 常见错误与修复对照表

症状/错误码 典型原因 快速修复
EACCES(权限被拒绝) 绑定低位端口(如 80/443)或目录无读写权限 改用 >1024 端口或以具备权限的用户运行;必要时调整目录权限(谨慎)
EADDRINUSE(地址已被占用) 端口被其他进程占用 更换端口或结束占用进程:`ss -ltnp
ECONNREFUSED(连接被拒绝) 目标服务未启动、配置错误或防火墙阻断 启动目标服务、核对地址与端口、放通防火墙/安全组
Error: listen EACCES 同上,常见于尝试绑定 80/443 使用非特权端口或配置反向代理(如 Nginx)
Module not found 依赖未安装或 NODE_PATH 异常 执行 npm install,核对本地/全局模块路径
SyntaxError: Unexpected identifier Node.js 版本过低 不支持新语法 使用 nvm 升级到合适版本
command not found: node/npm 未安装或 PATH 未包含可执行文件路径 安装 Node.js 或修正 PATH:export PATH=/path/to/node/bin:$PATH
ENOSPC(inotify 实例上限) 文件监听过多触发内核上限 提升上限:echo "fs.inotify.max_user_watches=524288" >> /etc/sysctl.conf && sysctl -p
lib64/libm.so.6: version `glibc_2.27’ not found glibc 版本过低 升级系统或选择兼容的 Node.js 版本(优先方案)
ERR_TIMEOUT / ECONNRESET 网络抖动、下游服务慢或异常、资源不足 优化网络与重试策略、检查下游健康、扩容 CPU/内存

三 运行环境与依赖检查

  • 版本与依赖:核对 Node.js/npm 与应用兼容;执行 npm ci(或 npm install)确保依赖一致;必要时使用 nvm 管理多版本。
  • 权限与路径:确保运行用户对代码目录、日志目录具备读写权限;避免以 root 直接运行业务进程,建议使用专用用户并通过 systemdPM2 管理。
  • 端口与防火墙:确认监听地址与端口正确,放通 firewalld/安全组 规则;避免端口冲突。
  • 环境变量:核对 NODE_ENV、数据库连接串、密钥等是否齐全且生效。

四 性能与资源瓶颈定位

  • 系统层监控:使用 top/htopnmon/atopglances 观察 CPU、内存、I/O;安装 sysstat 后用 sar 查看历史与实时指标(如 sar -u 1sar -r 1)。
  • 进程与网络:用 pm2 monitps aux | grep node 定位高占用进程;用 nethogs/iftop 查看进程/网卡带宽。
  • 日志分析:在 journalctl 或应用日志中检索 error/timeout/ECONNRESET 等关键字,结合时间戳与请求链路定位瓶颈。
  • 可视化与告警:搭建 Prometheus + Grafana 采集 Node/系统指标并配置阈值告警;或使用 ELK/Splunk 集中化日志检索与可视化。

五 调试与事后复盘

  • 调试手段:使用 node inspectVS Code 远程调试设置断点;对异常分支补充日志与 try-catch/Promise.catch()/EventEmitter error 处理。
  • 动态追踪:必要时用 strace/perf/systemtap/eBPF 跟踪系统调用与热点函数,定位难以复现的问题。
  • 运行方式建议:生产环境优先使用 PM2systemd 托管,开启 自动重启日志轮转,便于故障自愈与取证。
  • 变更留痕:记录 Node/npm 版本、依赖锁文件、系统/内核参数 与变更单,便于回溯与复盘。

0