centos

Node.js在CentOS中的错误排查方法

小樊
33
2026-01-02 02:30:31
栏目: 编程语言

Node.js 在 CentOS 的系统性错误排查指南

一 快速定位与通用排查步骤

二 日志与系统层面的定位

三 常见错误与修复对照表

症状 典型错误信息 快速检查 修复建议
命令未找到 command not found: node echo $PATH、which node 安装 Node.js 或将可执行目录加入 PATH
模块缺失 Error: Cannot find module ‘xxx’ ls node_modules/xxx 执行 npm install,或检查本地/私有包可达性
端口被占用 Error: listen EADDRINUSE :::3000 ss -ltnp 结束占用进程或改用未占用端口
权限被拒 Error: EACCES 目录权限、运行用户 调整目录权限或以合适用户运行
监听权限不足 Error: listen EACCES (需要 1024 以下端口) 端口号 改用**1024+**端口,或以具备权限的用户运行
文件监视上限 Error: ENOSPC dmesg 提升 inotify 限制:/etc/sysctl.conf 增加 fs.inotify.max_user_watches
原生模块编译失败 gyp ERR! gcc、make、python3 安装Development Toolsopenssl-devel等依赖后重装
依赖安装缓慢/失败 npm ERR! 网络 切换npm registry镜像源,或检查网络代理
服务启动但访问异常 无应用日志输出 systemctl status、journalctl 检查服务ExecStart、工作目录、环境变量与端口映射

四 性能与稳定性问题的排查

五 一键排查脚本示例

#!/usr/bin/env bash
set -e

APP_NAME="my-node-app"
APP_DIR="/opt/$APP_NAME"
LOG_DIR="$APP_DIR/logs"
PORT=3000

echo "=== 1) 版本与环境 ==="
node -v || echo "Node.js 未安装"
npm -v  || echo "npm 未安装"

echo "=== 2) 端口占用检查 ==="
ss -ltnp | grep ":$PORT" || echo "端口 $PORT 未被占用"

echo "=== 3) 目录与权限 ==="
ls -ld "$APP_DIR" "$LOG_DIR" 2>/dev/null || echo "目录不存在或不可读"

echo "=== 4) 服务日志(若存在)==="
if systemctl is-active --quiet "$APP_NAME"; then
  journalctl -u "$APP_NAME" -n 50 --no-pager
else
  echo "服务 $APP_NAME 未运行"
fi

echo "=== 5) 应用日志尾部 ==="
if [[ -f "$LOG_DIR/app.log" ]]; then
  tail -n 50 "$LOG_DIR/app.log"
else
  echo "日志文件 $LOG_DIR/app.log 不存在"
fi

echo "=== 6) 常见错误关键词检索 ==="
grep -i -n "error\|exception\|fail" "$LOG_DIR/app.log" 2>/dev/null | tail -20 || echo "未检索到错误关键词"

echo "=== 7) 原生模块编译依赖检查 ==="
if command -v gcc >/dev/null 2>&1; then
  echo "gcc 已安装: $(gcc --version | head -n1)"
else
  echo "gcc 未安装,建议:sudo yum groupinstall 'Development Tools' -y"
fi

if command -v make >/dev/null 2>&1; then
  echo "make 已安装: $(make -v | head -n1)"
else
  echo "make 未安装,建议:sudo yum install make -y"
fi

echo "=== 8) 网络连通性(示例:数据库)==="
# curl -v http://127.0.0.1:$PORT/health || echo "应用健康检查失败"
# 如需检查数据库,替换为实际地址与端口

将脚本保存为check-node.sh,赋予执行权限并运行:chmod +x check-node.sh && ./check-node.sh。

0
看了该问题的人还看了