错误日志是排查Node.js问题的核心线索,需优先检查应用程序自身日志或系统日志:
winston、morgan等库),可通过tail -f /path/to/app/logs/error.log实时查看实时错误信息;若未配置,需修改代码添加日志记录(如示例中用winston将错误写入/var/log/nodejs/error.log)。journalctl命令查看与Node.js进程相关的系统日志(如journalctl -u your-nodejs-service-name -t),适用于通过systemd管理的服务;或查看/var/log/messages、/var/log/syslog中的通用系统错误。版本不兼容是常见错误原因(如应用需要Node.js 14,但系统安装了18):
node -v查看当前版本,与项目要求的版本对比(如package.json中的engines字段)。nvm(Node Version Manager)管理多版本:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
source ~/.bashrc
nvm install 14 # 安装指定版本
nvm use 14 # 切换版本
避免直接使用系统包管理器安装(易出现版本滞后问题)。依赖缺失或冲突会导致应用启动失败(如Module not found、Cannot find module):
node_modules文件夹和package-lock.json文件(清除旧依赖):rm -rf node_modules package-lock.json
npm install
npm镜像)加速:npm config set registry https://registry.npmmirror.com
端口被占用会导致应用无法启动(如EADDRINUSE错误):
netstat或lsof命令查找占用端口的进程:sudo netstat -tulnp | grep :3000 # 替换为你的应用端口
# 或
sudo lsof -i :3000
sudo kill -9 PID
3000改为3001)。权限不足会导致应用无法读写文件(如EACCES、Permission denied):
nodeuser)对应用目录及日志文件有读写权限:sudo chown -R nodeuser:nodegroup /path/to/app # 修改目录所有者
sudo chmod -R 755 /path/to/app # 设置目录权限(所有者可读写执行,其他用户可读执行)
sudo chmod 644 /path/to/app/logs/error.log # 设置日志文件权限(所有者可读写,其他用户可读)
root用户运行应用(存在安全风险)。资源不足(内存、CPU、磁盘空间)会导致应用崩溃(如Out of Memory、JavaScript heap out of memory):
free -m查看内存使用情况,top或htop查看CPU占用,df -h查看磁盘空间:free -m
top
df -h
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 # 创建2GB交换文件
sudo mkswap /swapfile
sudo swapon /swapfile
(永久生效需将/swapfile none swap sw 0 0添加到/etc/fstab)。SELinux可能阻止Node.js访问文件或端口(如EACCES、Connection refused):
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sudo audit2allow -a # 根据审计日志生成允许规则
若以上步骤无法解决,需用调试工具定位代码逻辑错误(如语法错误、未捕获异常):
node inspect启动应用,在Chrome浏览器中打开chrome://inspect连接调试:node inspect app.js
launch.json文件(示例):{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug App",
"program": "${workspaceFolder}/app.js",
"outFiles": ["${workspaceFolder}/**/*.js"]
}
]
}
然后点击“启动调试”即可。lib64/libm.so.6: version GLIBC_2.27’ not found**:系统glibc版本过低,需升级glibc(谨慎操作,可能影响系统稳定性)或使用兼容的Node.js版本(如通过nvm`安装较低版本)。SyntaxError: Unexpected identifier:Node.js版本过低不支持新语法(如ES6模块),升级Node.js至最新稳定版。command not found: node:Node.js未正确安装或未添加到PATH,重新安装并配置环境变量(如将/usr/local/bin添加到~/.bashrc)。