教程 pm2 tutorial

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 提供了简单的命令来查看日志。通过这些命令,开发者可以快速查看应用的输出信息以及错误信息。

查看所有日志

bash
pm2 logs

`

该命令将显示所有正在运行的应用的日志,包括标准输出和错误日志。

查看特定应用的日志

如果你只关心某个特定应用的日志,可以使用以下命令:

bash
pm2 logs <app-name>

例如,要查看名为 my-app 的应用日志:

bash
pm2 logs my-app

查看错误日志

如果你只想查看错误日志,可以使用 --error 标志:

bash
pm2 logs <app-name> --error

例如:

bash
pm2 logs my-app --error

这将仅显示 my-app 的错误日志,帮助你快速定位问题。

查看最后 1000 行日志

如果日志过长,可以通过 --lines 标志查看最近的日志行。例如,查看最近的 1000 行日志:

bash
pm2 logs my-app --lines 1000

持续查看日志

如果你希望实时查看日志,可以使用 --follow 标志:

bash
pm2 logs my-app --follow

该命令将持续输出日志内容,直到你手动停止查看。

3. 分析错误日志

分析 PM2 的错误日志对于排查应用故障至关重要。错误日志通常包含了应用崩溃、内存问题、未捕获异常等信息。以下是一些常见的错误日志类型:

1. 未捕获的异常(Uncaught Exceptions)

未捕获的异常通常是应用崩溃的常见原因。比如,访问了一个未定义的变量或发生了未处理的错误,都会导致应用崩溃并生成错误日志。

示例错误日志

txt
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 错误。

示例错误日志

txt
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory

为解决内存溢出问题,可以通过增加 --max-old-space-size 标志来提高 Node.js 进程的最大内存限制,或者查找代码中的内存泄漏问题。

3. 端口冲突(Port Conflict)

如果你的应用尝试绑定一个已被占用的端口,PM2 会记录端口冲突的错误。

示例错误日志

txt
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 也会记录相关错误。

示例错误日志

txt
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: 修复并重新部署

根据错误信息修复代码问题后,重新启动应用。如果是内存溢出或性能问题,考虑优化代码,减少内存消耗或提高性能。

使用以下命令重启应用:

bash
pm2 restart <app-name>

步骤 4: 监控应用

修复后,使用 pm2 monit 或 pm2 logs 实时监控应用,确保问题已得到解决。

5. 总结

PM2 提供了强大的错误日志功能,帮助你轻松捕获和分析 Node.js 应用中的错误。通过查看和分析错误日志,你可以快速定位问题并进行修复,确保应用在生产环境中的稳定性。常见的错误包括未捕获的异常、内存溢出、端口冲突和外部依赖错误,PM2 提供的日志信息和监控工具能够有效帮助开发者解决这些问题。