Node进程管理
About 7 min
Node进程管理
Node 进程管理工具
工具名称 | 功能特点 | 使用场景 |
---|---|---|
PM2 | 强大的进程管理工具,具有进程守护、多进程管理、日志管理、环境管理、监控与报警等功能。适用于生产环境,可后台运行,不影响进程。 | 适用于网站访问量较大,需要完整监控界面的场景。 |
Forever | 简单的命令行界面工具,用于连续运行Node.js脚本。支持监视文件更改、调试模式、应用程序日志等功能。 | 适用于管理多个站点,每个站点访问量不大,不需要复杂监控的场景。 |
StrongLoop PM | 开源的高级生产过程管理器,内置负载均衡。可以通过命令行或图形界面使用。 | 适用于需要高级功能和图形界面的场景。 |
Supervisor | 开发环境用,修改命令后重启应用。但关闭控制台后,整个进程会停止。 | 适用于开发环境,方便开发者在修改代码后重启应用。 |
PM2
PM2是一个基于Node.js的进程管理工具,它在生产环境中为Node.js应用程序提供了全面的管理和运行支持。
功能
核心功能:
- 进程守护:PM2可以确保你的Node.js应用始终保持运行状态。即使应用崩溃或服务器重启,PM2也能自动重启应用,确保业务的连续性。
- 多进程管理:PM2支持以多个进程运行同一个应用,这有助于充分利用多核处理器的性能优势,提高应用的响应速度和吞吐量。
- 日志管理:PM2提供了强大的日志管理功能,可以将应用程序的日志输出到单个文件中,并支持日志轮换和日志时间戳等功能,使得日志查看和分析更加便捷。
- 环境管理:PM2支持在不同的环境中运行应用程序,例如开发环境、生产环境等。你可以轻松切换和管理不同的配置参数,满足不同场景的需求。
- 监控与报警:PM2提供了一个仪表板,可用于监控应用程序的运行状态,包括CPU和内存使用情况等关键指标。当发生异常、内存泄漏或性能问题时,PM2能及时发送警报,帮助开发者迅速定位和解决问题。
其他特色功能:
- 自动重启:在开发过程中,当代码发生更改时,PM2可以自动检测并重新启动应用程序,无需手动停止和启动,提高了开发效率。
- 内置负载均衡:对于需要处理大量并发请求的应用,PM2的内置负载均衡功能可以将请求分散到多个进程中,提高应用的可用性和性能。
- 应用热更新:PM2支持热更新功能,允许开发者在应用运行过程中进行代码修改,无需重启即可生效,进一步提升了开发效率。
安装
在终端或命令提示符中执行以下命令:
npm install -g pm2
选择创建PM2的可执行文件的软连接:通常是在/usr/local/bin/
路径下创建,但具体路径可能因你的系统配置而有所不同。
使用whereis node
命令可以帮助你全局搜索Node.js的安装路径,从而确保正确设置软连接。
常见命令
命令 | 说明 | 使用示例 |
---|---|---|
pm2 start app.js | 启动Node.js应用程序 | pm2 start app.js |
pm2 start app.js --name my-api | 启动应用程序并指定进程名称 | pm2 start app.js --name my-api |
pm2 start app.js -i 0 | 根据CPU核数启动相应数量的进程 | pm2 start app.js -i 0 |
pm2 start app.js --watch | 实时监控文件变化并自动重启应用程序 | pm2 start app.js --watch |
pm2 list | 显示所有PM2管理的应用程序列表 | pm2 list |
pm2 show 0 或 pm2 info 0 | 显示指定ID的进程的详细信息 | pm2 show 0 或 pm2 info 0 |
pm2 monit | 打开可视化界面,监控应用程序的性能和资源使用情况 | pm2 monit |
pm2 stop all | 停止所有PM2管理的应用程序 | pm2 stop all |
pm2 stop 0 | 停止指定ID的应用程序 | pm2 stop 0 |
pm2 restart 0 | 重启指定ID的应用程序 | pm2 restart 0 |
pm2 reload all | 重载所有PM2管理的应用程序 | pm2 reload all |
pm2 logs <app> | 显示指定应用程序的日志 | pm2 logs my-api |
Node 项目配置 pm2
配置PM2以管理Node.js应用主要涉及创建一个包含应用信息的配置文件,并使用PM2工具来启动和管理这些应用。以下是详细的配置步骤:
步骤一:创建配置文件
在项目根目录下创建一个JSON配置文件,如app.json
。
在这个文件中,你可以定义应用的名称、启动脚本、工作目录、文件监视列表以及日志文件的输出位置和格式等。例如:
{
"apps": [
{
"name": "website",
"script": "./bin/www",
"cwd": "./",
"watch": ["bin","config","routes","views"],
"error_file": "./logs/website-err.log",
"out_file": "./logs/website-out.log",
"log_date_format": "YYYY-MM-DD HH:mm Z"
}
]
}
这个配置表示有一个名为“website”的应用,其启动脚本为
./bin/www
,工作目录为当前目录(./
),并且会监视bin
、config
、routes
和views
这四个目录下的文件变化。如果这些文件有变化,PM2会自动重启应用。同时,应用的错误日志和输出日志分别输出到./logs/website-err.log
和./logs/website-out.log
,日志的时间格式为"YYYY-MM-DD HH:mm Z"。
PM2 配置项:
配置项 | 类型 | 描述 | 示例 |
---|---|---|---|
name | 字符串 | 应用名称,可以自定义。 | "name": "my-app" |
script | 字符串 | 应用的入口文件路径,通常为Node.js的主文件。 | "script": "app.js" |
args | 字符串或数组 | 传递给应用的启动参数。 | "args": "--port=3000" |
cwd | 字符串 | 应用的工作目录,默认为当前目录。 | "cwd": "/path/to/app" |
watch | 布尔值或数组 | 监控文件变化并自动重启应用。可以是布尔值或要监控的文件路径数组。 | "watch": true 或 "watch": ["app.js", "lib"] |
ignore_watch | 数组 | 忽略监控的文件或目录列表。 | "ignore_watch": ["node_modules", "logs"] |
exec_interpreter | 字符串 | 应用的脚本解释器路径,默认为Node.js。 | "exec_interpreter": "/usr/local/bin/node" |
instances | 数字 | 应用启动的实例数,在cluster模式下有效。 | "instances": 4 |
autorestart | 布尔值 | 应用崩溃或退出时是否自动重启。 | "autorestart": true |
max_memory_restart | 字符串或数字 | 应用使用的最大内存限制,超过后自动重启。例如:"1G"或1024。 | "max_memory_restart": "1G" |
env | 对象 | 应用的环境变量。 | "env": {"NODE_ENV": "production"} |
out_file | 字符串 | 应用的标准输出日志文件路径。 | "out_file": "./logs/app-out.log" |
err_file | 字符串 | 应用的标准错误输出日志文件路径。 | "err_file": "./logs/app-err.log" |
pid_file | 字符串 | 应用的进程ID文件路径。 | "pid_file": "./logs/app.pid" |
merge_logs | 布尔值 | 是否将多个应用的日志合并到一个文件。 | "merge_logs": true |
log_date_format | 字符串 | 日志日期格式。 | "log_date_format": "YYYY-MM-DD HH:mm:ss.SSS" |
min_uptime | 字符串或数字 | 应用运行的最小时间,达到后才进行重启。例如:"2h"或7200。 | "min_uptime": "2h" |
max_restarts | 数字 | 应用的最大重启次数,超过后不再自动重启。 | "max_restarts": 10 |
restart_delay | 数字 | 应用重启的延迟时间(毫秒)。 | "restart_delay": 1000 |
这些配置项可以在app.json
文件中定义,以便PM2能够按照你的需求来启动和管理Node.js应用。你可以根据你的具体需求,选择合适的配置项,并设置相应的值。
步骤二:使用PM2启动应用
在终端中,使用以下命令启动应用:
pm2 start app.json
这将根据app.json
配置文件中的信息启动名为“website”的Node.js应用,并由PM2管理。