华丽的蜕变,放弃node-forever 改用 pm2
因为我的博客是ghost,基于node的,所以关闭shell的之后需要有额外工具来帮住守护住 ghost的 进程,不然一旦shell关闭 博客也就无法访问了。
之前我一直使用的forever来守护ghost的进程,然而forever虽然诞生的早,稳定性相对高一些,但是也会有一些不足的地方,比如说如果我用forever守护了多个进程的时候,我使用
forever list
来查看所有进程,得到的结果是这样的:
进程是都列出来了,但是。。。forever没有提供一个 查看单个进程详情的功能,这TM就很尴尬了,当进程一多之后,鬼知道哪个是哪个?
如果我想知道当前forever所有进程的资源消耗情况也没有相应的功能……
虽然说以上提到的2点其实对一般的个人站长而言没啥卵用,但偶尔需要的时候真心捉鸡蛋疼。
而后来一次偶然的机遇 让我遇到了[pm2][1]……遂 google bing baidu之。。。
pm2诞生的比forever晚,在pm2的开发团队眼中,forever存在以下几点缺陷
- log 和监视的功能有限\n* 进程和集群管理有限
- Aging codebase (升级 Node 容易导致应用失败)
pm2 VS forever
Feature | Forever | PM2 |
---|---|---|
Keep Alive | ✔ | ✔ |
Coffeescript | ✔ | |
Log aggregation | ✔ | |
API | ✔ | |
Terminal monitoring | ✔ | |
Clustering | ✔ | |
JSon configuration | ✔ |
可见 pm2
着实比forever
更强大
对于pm2
的安装 我想不必多说了,但还是意思意思提一下
npm install pm2 -g
在用法上跟forever
几乎差不多
常用命令总结如下:
- 启动应用
pm2 start app.js
- 列出所有应用
pm2 list
- 查看资源消耗
pm2 monit
- 查看某一个应用状态
pm2 show [app id]
- 查看所有日志
pm2 logs
- 重启应用
pm2 restart [app id]
- 停止应用
pm2 stop [app id]
- 开启api访问
pm2 web
更多pm2内容请参考官方文档[2]
对于Ghost的启动
之前我们使用forever
的时候要在服务器上部署Ghost使用如下命令
NODE_ENV=production forever start index.js
而现在我们换成PM2
的话命令其实是一样的,只是把forever
改成pm2
NODE_ENV=production pm2 start index.js
PM2特色
-
图形化列表页
pm2 list
-
进程详情
pm2 show <id|name>
(妈妈再也不用担心我因为进程太多而不知道谁是谁啦)
3. 查看资源消耗 pm2 monit
4. 强大的API pm2 web
(你猜会发生什么?打开你的浏览器看看?)
==前方高能!!!====前方高能!!!==前方高能!!!
把部署的服务器的信息和程序的信息都显示出来了,这东西对程序运行的监控页面的开发那是相当有帮助!
缺点
刚才介绍了那么多好处,当然pm2
并不是那么十全十美的,
pm2
的内存占用肯定比forever
高那么一丢丢,毕竟它功能多了不少,- 据说 pm2 有一大堆的小坑
- 有网友表示
pm2 stop
的之后 进程关闭但是端口依然占用,要使用pm2 kill
才能彻底关闭进程并释放端口,但是,pm2表示这个锅我们不能背!在pm2的github issue#74[3] 中有提及,归根到底是因为 == pm2 的 cluster 用的是 node 自带的 cluster 模块 ==,所以这个锅要扔给 Nodejs,而问题的根本是出在node v0.10.x
上,这个版本的 cluster模块自身有问题 所以才导致了 进程结束而端口依旧占用的bug,而其他版本的node
暂时没发现类似问题,至少v0.8.x v0.11.x v4.x
是没问题的~
总结
其实没什么总结~
总之pm2
和forever
孰优孰劣也就见仁见智了吧~ 看个人喜好而已~
我是颜控,所以我最终选择了pm2
,但是forever
这么多年也不是白活的
P.S 额外的补充资料:
- ubuntu 查看 node所占用的 系统端口 情况命令:
ps -aux | grep node
PM2官网:http://pm2.keymetrics.io/ ↩︎
pm2 github issue#74: https://github.com/Unitech/pm2/issues/74 ↩︎