pm2 list #查看当前启动的nextjs服务进程
pm2 delete nextjs #删除名字叫nextjs的服务进程
pm2 start npm --name "nextjs" -i max -- start #启动nextjs服务,名字叫做"nextjs",按照服务器的CPU数启动进程数量
pm2 save #保存进程
pm2 logs nextjs --lines 50 #列出最近50条报错记录
pm2 reload nextjs #重启nextjs服务
pm2 restart nextjs #重启nextjs服务
pm2 reload 和 pm2 restart 都是用于重启由 PM2 管理的应用,但它们在工作方式和对服务可用性的影响上有本质区别。
pm2 reload nextjs 和 pm2 restart nextjs 有什么区别?
1. pm2 restart —— 快速重启(有短暂中断)
行为:立即停止所有正在运行的进程,然后重新启动它们。
特点:
所有进程同时被杀死,新进程启动前会有一个服务不可用的窗口期(通常几秒到几十秒)。
无论应用运行在 fork 模式还是 cluster 模式,restart 都会导致全部进程重启。
适用场景:
开发环境或对停机不敏感的内部工具。
需要完全重置应用状态(例如修改了环境变量、配置文件等)。
应用不是集群模式(如单进程)时,restart 是唯一选择。
2. pm2 reload —— 零停机重载(仅集群模式有效)
行为:逐个重启工作进程,确保始终至少有一个进程在处理请求。
先启动一个新的工作进程,等待新进程成功运行后,才关闭一个旧的进程。
重复上述过程,直到所有旧进程被替换。
特点:
服务不中断:整个过程中始终有进程在响应请求,用户无感知。
应用必须运行在 cluster 模式(通过 -i 参数启动多实例)。
支持优雅停机:PM2 在关闭旧进程前会发送 SIGINT 信号,允许应用完成正在处理的请求、关闭数据库连接等清理工作(需在代码中实现)。
适用场景:
生产环境,需要在不影响用户的情况下更新代码。
应用是无状态的(或状态存储在外部如 Redis、数据库),因为新进程不共享旧进程的内存数据。
