Linux JS日志错误码大全及解决方法
小樊
42
2025-12-07 08:43:05
Linux 环境下 JS 日志错误码与排查指南
一 常见 JavaScript 运行时错误与修复
- SyntaxError 语法错误:代码无法被解析,如缺少引号、括号不匹配、非法字符。修复:使用 ESLint/Prettier 本地校验,逐行检查报错行号与上下文,修正语法。
- TypeError 类型错误:对不兼容类型执行操作,如调用非函数、读取 null/undefined 的属性。修复:在访问前做类型守卫与空值判断,例如
typeof fn === 'function' && fn()、obj && obj.prop。
- ReferenceError 引用错误:访问未声明变量或不存在的属性。修复:确认变量已用 var/let/const 声明,作用域正确;避免拼写错误与未初始化。
- RangeError 范围错误:数值或数据结构参数越界,如数组长度为负、递归过深。修复:校验入参范围,限制递归深度或改为迭代实现。
- URIError URI 错误:encodeURI/decodeURI/encodeURIComponent/decodeURIComponent 参数非法。修复:对输入做合法性校验与转义,避免截断与非法字符。
- EvalError eval 错误:与 eval 使用相关,现代 ES5+ 环境极少抛出。修复:避免使用 eval,改用更安全的数据解析方式(如 JSON.parse)。
- Error 通用错误:其他未分类错误。修复:在 try/catch 中捕获,记录堆栈与上下文,定位根因。
二 Node.js 常见系统错误码与处理
- EADDRINUSE address already in use :::3000:端口被占用。处理:查找并结束占用进程
lsof -iTCP:3000 -sTCP:LISTEN 或 ss -ltnp | grep 3000,或改用未占用端口。
- EACCES permission denied:权限不足。处理:检查文件/目录权限与用户组,必要时使用 sudo 或调整权限;避免以 root 长期运行服务。
- EMFILE too many open files:进程打开文件描述符超限。处理:提升系统限制(如 ulimit -n)、关闭无用连接、使用连接池与流式处理。
- ENOSPC No space left on device:磁盘空间不足。处理:清理日志与临时文件,扩容磁盘或挂载点。
- EPIPE Broken pipe:向已关闭的管道/套接字写入。处理:处理客户端提前断开场景,忽略或优雅降级。
- ECONNREFUSED Connection refused:目标主机端口未监听。处理:确认服务已启动并监听正确地址与端口,检查防火墙/安全组。
- ETIMEDOUT Connection timed out:连接超时。处理:检查网络连通性、目标服务负载与超时配置。
- ENOTFOUND DNS lookup failed:域名解析失败。处理:核对 DNS 配置与域名拼写,必要时更换 DNS 或本地 hosts 解析。
三 在 Linux 上快速定位与排查
- 定位日志与关键字:使用 cat/less/grep 检索错误,如
grep -n 'SyntaxError\|TypeError' app.log;前端错误可结合浏览器 DevTools Console 与 Network 面板。
- 查看端口占用:
ss -ltnp | grep :3000 或 lsof -iTCP:3000 -sTCP:LISTEN 定位占用进程并决定是否终止或迁移端口。
- 查看服务状态与重启:
systemctl status myapp 查看日志与退出码,sudo systemctl restart myapp 使修复生效。
- 资源与句柄检查:
ulimit -n 查看文件描述符上限,df -h 检查磁盘空间,free -m 观察内存使用。
- 结构化日志与告警:使用 Winston/Bunyan 输出结构化日志,结合 ELK Stack(Elasticsearch, Logstash, Kibana) 或 Prometheus + Grafana 做错误聚合、趋势与告警。
四 预防与最佳实践
- 代码质量:在 CI 中加入 ESLint/Prettier,严格模式 ‘use strict’,统一 Node.js 与 npm 版本,锁定依赖版本。
- 错误处理:同步代码用 try/catch,异步代码用 Promise.catch/async-await try-catch,全局监听 process.on(‘uncaughtException’)/(‘unhandledRejection’) 做兜底并记录堆栈。
- 日志规范:使用 Winston/Bunyan 输出时间戳、级别、服务名、请求 ID、堆栈与上下文,避免仅打印字符串。
- 资源与部署:健康检查与就绪探针,优雅停机与限流,按环境区分日志级别,定期归档与清理。