PM2 错误日志
PM2 是一个强大的进程管理工具,不仅能够帮助你管理 Node.js 应用的生命周期,还能为你提供详细的错误日志,帮助你快速定位和解决应用中的问题。通过分析 PM2 生成的错误日志,开发者可以诊断应用故障、优化性能,并确保应用在生产环境中的稳定运行。
1. PM2 日志系统概述
PM2 会自动捕获应用的标准输出(stdout)和标准错误输出(stderr),并将它们记录到日志文件中。开发者可以通过 PM2 提供的命令查看这些日志,帮助他们快速发现和修复应用的问题。
默认日志路径
PM2 默认将日志文件存储在以下路径:
- 标准输出日志:
~/.pm2/logs/<app-name>-out.log - 错误日志:
~/.pm2/logs/<app-name>-error.log
其中 <app-name> 是你在启动应用时指定的名称。
2. 查看错误日志
PM2 提供了简单的命令来查看日志。通过这些命令,开发者可以快速查看应用的输出信息以及错误信息。
查看所有日志
pm2 logs该命令将显示所有正在运行的应用的日志,包括标准输出和错误日志。
查看特定应用的日志
如果你只关心某个特定应用的日志,可以使用以下命令:
pm2 logs <app-name>例如,要查看名为 my-app 的应用日志:
pm2 logs my-app查看错误日志
如果你只想查看错误日志,可以使用 --error 标志:
pm2 logs <app-name> --error例如:
pm2 logs my-app --error这将仅显示 my-app 的错误日志,帮助你快速定位问题。
查看最后 1000 行日志
如果日志过长,可以通过 --lines 标志查看最近的日志行。例如,查看最近的 1000 行日志:
pm2 logs my-app --lines 1000持续查看日志
如果你希望实时查看日志,可以使用 --follow 标志:
pm2 logs my-app --follow该命令将持续输出日志内容,直到你手动停止查看。
3. 分析错误日志
分析 PM2 的错误日志对于排查应用故障至关重要。错误日志通常包含了应用崩溃、内存问题、未捕获异常等信息。以下是一些常见的错误日志类型:
1. 未捕获的异常(Uncaught Exceptions)
未捕获的异常通常是应用崩溃的常见原因。比如,访问了一个未定义的变量或发生了未处理的错误,都会导致应用崩溃并生成错误日志。
示例错误日志
TypeError: Cannot read property 'name' of undefined
at /path/to/app.js:42:16
at processTicksAndRejections (node:internal/process/task_queues:96:5)在这种情况下,你需要检查应用代码的第 42 行,确保变量 name 是定义且有效的。
2. 内存溢出(Out of Memory)
内存溢出通常是由于内存泄漏或大量数据操作引起的。当应用使用的内存超过了系统的限制时,Node.js 会抛出 Out of Memory 错误。
示例错误日志
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory为解决内存溢出问题,可以通过增加 --max-old-space-size 标志来提高 Node.js 进程的最大内存限制,或者查找代码中的内存泄漏问题。
3. 端口冲突(Port Conflict)
如果你的应用尝试绑定一个已被占用的端口,PM2 会记录端口冲突的错误。
示例错误日志
Error: listen EADDRINUSE: address already in use 0.0.0.0:3000
at Server.setupListenHandle [as _listen2] (net.js:1263:14)
at listenInCluster (net.js:1367:12)
at Server.listen (net.js:1462:7)在这种情况下,检查应用是否已经在该端口上运行,或者修改应用的端口配置。
4. 外部依赖错误
如果应用依赖的外部服务(如数据库、API)不可用或返回错误,PM2 也会记录相关错误。
示例错误日志
Error: Cannot connect to database: Connection refused
at /path/to/database/connection.js:50:15解决方法包括检查数据库连接配置、网络连接和数据库服务是否正常。
4. 使用 PM2 错误日志进行故障排查
步骤 1: 确认错误日志
首先,使用 pm2 logs <app-name> --error 查看应用的错误日志,记录下错误的详细信息,例如错误类型、堆栈信息和发生错误的行数。
步骤 2: 重现错误
通过分析错误日志中的堆栈信息,定位问题的根源。尽量在开发环境中重现错误,并查看是否能通过调试工具(如 console.log 或 debugger)进一步确认问题。
步骤 3: 修复并重新部署
根据错误信息修复代码问题后,重新启动应用。如果是内存溢出或性能问题,考虑优化代码,减少内存消耗或提高性能。
使用以下命令重启应用:
pm2 restart <app-name>步骤 4: 监控应用
修复后,使用 pm2 monit 或 pm2 logs 实时监控应用,确保问题已得到解决。
5. 总结
PM2 提供了强大的错误日志功能,帮助你轻松捕获和分析 Node.js 应用中的错误。通过查看和分析错误日志,你可以快速定位问题并进行修复,确保应用在生产环境中的稳定性。常见的错误包括未捕获的异常、内存溢出、端口冲突和外部依赖错误,PM2 提供的日志信息和监控工具能够有效帮助开发者解决这些问题。