Pm2中,你真的会停止应用吗? | Pm2系列(一)stop 与 delete 的正确方法

1,687 阅读2分钟

前言

一名正在自由职业的程序员的独立开发之路

说明

本篇文章主要是最近在上线自己的node服务,部署工具用的工具是PM2,本系列主要把自己的踩坑经历记录下来

经过描述

错误操作如下

  1. 把某个应用 scan-koa-server(正在运行中) 删除 pm2 delete 3(当时id为3)
  2. 重新启动应用 pm2 start index --time --name scan-koa-server

导致的结果

  1. pm2 中的名为 scan-koa-server的应用 状态为 error,但是 通过 网址访问,服务却是在运行中的
  2. pm2 monitor 中对应的 scan-koa-server 没有实时的访问日志(此时我正在访问 api接口,按道理应该有实时的日志才对)

这个图中的 id 为4的就是新启动的应用,但是一直都是 error,怎么启动都没有用,但是服务器的接口也是可以访问的(id为2 的那个是后来我stop的) c99e65b60d1816529a4d694581077dd.png

排查经过

通过端口排查

因为 pm2 list中可以看到每个应用对应的 线程,但是具体的端口不知道,既然服务器可以访问

那么我们就 查看所有的端口,这样就知道 不同的端口对用的 线程id了,这样就知道,我目前访问的服务对应的 线程是哪个

知道线程是哪个再对应 pm2 list 中的信息,就知道访问的是哪个应用

# 查看所有端口信息
netstat -ntlp

找到你服务端口就对应的线程 我的服务对应的 pid 为 21312(我的对应的是这个)

18b70fc145eb70cb162f124cb22f894.png

# 列出pm2应用列表信息 
pm2 list

注意下图是已经被我 stop之后的,之前的没有截图 当时是能看到 index 那个的pid 就是 21312,能对应的上

c99e65b60d1816529a4d694581077dd.png

···

# 查看这个引用的基本信息
pm2 show index

因为这个应用已经删了,所以此处找不到截图了

看了之后我才知道,原来它的信息和 最下面那个 scan-koa-server是一样的

# 查看日志
pm2 logs scan-koa-server --lines 1000

看下这个服务为什么一直error,看看日志

8f80a13835ee6f87f2d72bf79c5b78f.png

最终处理

# 先处理之前的应用
pm2 stop index
pm2 delete index
# 启动现在的应用
pm2 restart scan-koa-server

总结

  1. pm2 delete xx, 如果直接 删除一个 在运行中的应用,那么这个应用还是在运行,只是不在 pm2 中显示了(此处我这边是直接变成了 index)
  2. 删除一个应用 必须先 pm2 stop xxx,再 pm2 delete xxx,这样才算杀出干净,对应端口也没有了
  3. 学会如何排查问题
# 查看服务器端口
netstat -ntlp
# 查看pm2应用详细信息
pm2 show xxx
pm2 list
# 查看日志
pm2 show xx --lines 1000