前言
一名正在自由职业的程序员的独立开发之路
说明
本篇文章主要是最近在上线自己的node服务,部署工具用的工具是PM2,本系列主要把自己的踩坑经历记录下来
经过描述
错误操作如下
- 把某个应用
scan-koa-server(正在运行中) 删除pm2 delete 3(当时id为3) - 重新启动应用
pm2 start index --time --name scan-koa-server
导致的结果
- pm2 中的名为
scan-koa-server的应用 状态为error,但是 通过 网址访问,服务却是在运行中的 - pm2 monitor 中对应的
scan-koa-server没有实时的访问日志(此时我正在访问 api接口,按道理应该有实时的日志才对)
这个图中的 id 为4的就是新启动的应用,但是一直都是 error,怎么启动都没有用,但是服务器的接口也是可以访问的(id为2 的那个是后来我stop的)
排查经过
通过端口排查
因为 pm2 list中可以看到每个应用对应的 线程,但是具体的端口不知道,既然服务器可以访问
那么我们就 查看所有的端口,这样就知道 不同的端口对用的 线程id了,这样就知道,我目前访问的服务对应的 线程是哪个
知道线程是哪个再对应 pm2 list 中的信息,就知道访问的是哪个应用
# 查看所有端口信息
netstat -ntlp
找到你服务端口就对应的线程 我的服务对应的 pid 为 21312(我的对应的是这个)
# 列出pm2应用列表信息
pm2 list
注意下图是已经被我 stop之后的,之前的没有截图 当时是能看到 index 那个的pid 就是 21312,能对应的上
···
# 查看这个引用的基本信息
pm2 show index
因为这个应用已经删了,所以此处找不到截图了
看了之后我才知道,原来它的信息和 最下面那个 scan-koa-server是一样的
# 查看日志
pm2 logs scan-koa-server --lines 1000
看下这个服务为什么一直error,看看日志
最终处理
# 先处理之前的应用
pm2 stop index
pm2 delete index
# 启动现在的应用
pm2 restart scan-koa-server
总结
- pm2 delete xx, 如果直接 删除一个 在运行中的应用,那么这个应用还是在运行,只是不在 pm2 中显示了(此处我这边是直接变成了 index)
- 删除一个应用 必须先 pm2 stop xxx,再 pm2 delete xxx,这样才算杀出干净,对应端口也没有了
- 学会如何排查问题
# 查看服务器端口
netstat -ntlp
# 查看pm2应用详细信息
pm2 show xxx
pm2 list
# 查看日志
pm2 show xx --lines 1000