告别node-forever,拥抱PM2[转载]

devo.ps团队对JavaScript的迷恋已经不是什么秘密了;node.js作为服务器端,AngularJS作为客户端,某种程度上说,我们的堆栈是用它建成的.我们构建静态客户端和RESTful JSON API的方法意味着我们跑了很多的node.js,我必须承认尽管node.js的一切都令人敬畏,但当我们在生产环境中运行它时它仍然会让我们感到头疼.相比一些更加成熟的语言,它的工具和最佳实践仍然缺乏(试想一下:监控,日志,错误处理).

到目前为止,我们仍然依赖漂亮俏皮的node-forever模块.它是非常伟大的模块,不过依然缺失一些功能:

  • 有限的监控和日志功能
  • 进程管理配置的支持差
  • 不支持集群
  • 代码库老化(意味着在升级node.js时频繁的失败)

这就是为什么我们要在过去的几个月里去写PM2模块.在我们即将发布针对生产环境的正式版之前我们想先让您看一眼.

###PM2到底是什么个东西呢?

首先第一件事,你需要先通过npm来安装它:

npm install -g pm2

让我们通过表格来对比下:

Feature Forever PM2
Keep Alive ? ?
Coffeescript ?
 
Log aggregation
 
?
API
 
?
Terminal monitoring
 
?
Clustering
 
?
JSON configuration
 
?

现在让我来介绍一点点主要特性…

###原生的集群化支持

Node v0.6引入了集群特性,允许你在多个Node应用中共享socket.问题在于,它不能在容器外运行而且需要一些额外的配置来处理主进程和子进程.

PM2原生支持处理这个问题,而且不需要额外的代码:PM2本身作为主进程,然后它将你的代码封装到一个特殊的集群进程里,就像node.js一样,为你的代码文件添加一些全局变量.

想要启动一个使用所有CPU核心的集群,你只需要键入如下的指令:

$ pm2 start app.js -i max

然后:

$ pm2 list

然后就会显示类似下面的东西(ASCII UI FTW);

就像你看到的,现在你的应用有多少个进程就取决于你的CPU核心数了

###按照termcaps-HTOP(Linux下的系统监控与进程管理软件)的方式管理

通过pm2 list命令来观察所有运行的进程以及它们的状态已经足够好了.但是怎么来追踪它们的资源消耗呢?别担心,用这个命令:

$ pm2 monit

你可以得到进程(以及集群)的CPU的使用率和内存占用.

声明:node-usage到目前为止还不支持MacOS(随便什么性能要求),不过它在Linux下运行良好.

现在,让我们来核实一下我们的集群,还有对内存堆栈的垃圾回收,我们假设你已经有一个HTTP基准测试工具(如果没有,你一定要使用WRK):

$ express bufallo    //Create an express app
$ cd bufallo
$ npm install
$ pm2 start app.js -i max
$ wrk -c 100-d 100 http://localhost:3000/

在另一个终端,运行监控选项:

$ pm2 monit

耶~

###实时集中log处理

现在你不得不管理多个集群进程:一个爬取数据,一个处理数据,等等…这就意味着大量log,你可以按照老式的方法处理:

$ tail -f /path/to/log1 /path/to/log2 ...

但我们想的很周到,我们增加了logs功能:

$ pm2 logs

###快速恢复

现在事情一切顺利,你的进程嗡嗡的运行着,你需要做一次硬重启(hard restart).现在吗?是的,首先,dump掉:

$ pm2 dump

然后,你可以从文件中恢复它:

$ pm2 kill      //让我们假设一个PM2停掉了
$ pm2 resurect  //我所有的进程又满血满状态复活了

###强健的API

比方说,你想要监控所有被PM2管理的进程,而且同时还想监控运行这些进程的机器的状态(甚至希望创建一个Angular应用来调用这些API…):

$ pm2 web

打开浏览器输入http://localhost:9615 ,我嘞个去!

###对了,还有很多特性…

  • 全部测试通过,
  • 新一代的update-rc.d(pm2 startup),当然它还是alpha版,
  • 开发模式下更改文件自动重启(pm2 dev),也同样还是草稿,
  • 自动刷新log,
  • 快捷的通过JSON文件管理你的应用,
  • 在error log里记录未捕获的异常,
  • 记录重启的次数和时间,
  • 退出时自动杀死进程.

##下一步计划?

首先,你可以去Github上粉我们(我们喜欢stars).

我们开发的PM2提供了先进完整的Node进程管理解决方案.我们希望能有更多的人来帮助我们:更多的pull requests.一些还停留在开发路线图上面的功能我们会尽快完成,下面这些就是:

  • 远程管理/状态校验,
  • 嵌入式跨进程通信通道(消息总线),
  • V8垃圾回收的内存泄漏检查,
  • Web界面,
  • 监控数据持久化,
  • 邮件通知.
时间: 2024-08-09 20:47:07

告别node-forever,拥抱PM2[转载]的相关文章

告别node-forever,拥抱PM2

告别node-forever,拥抱PM2 返回原文英文原文:Goodbye node-forever,hello PM2 devo.ps团队对JavaScript的迷恋已经不是什么秘密了;node.js作为服务器端,AngularJS作为客户端,某种程度上说,我们的堆栈是用它建成的.我们构建静态客户端和RESTful JSON API的方法意味着我们跑了很多的node.js,我必须承认尽管node.js的一切都令人敬畏,但当我们在生产环境中运行它时它仍然会让我们感到头疼.相比一些更加成熟的语言,

Node.js使用PM2的集群将变得更加容易

介绍 众所周知,Node.js运行在Chrome的JavaScript运行时平台上,我们把该平台优雅地称之为V8引擎.不论是V8引擎,还是之后的Node.js,都是以单线程的方式运行的,因此,在多核心处理器的系统中并不能发挥其最大的性能. Node.js的cluster模块 幸运的是,Node.js给我们提供了cluster模块,它可以生成多个工作线程来共享同一个TCP连接. 它是如何运作的呢? 首先,Cluster会创建一个master,然后根据你指定的数量复制出多个server app(也被

利用forever和pm2部署node.js

一.forever forever可以在cmd或ssh连接断开时,让项目一直运行,而且可以在项目崩溃时自动重启 ?安装 npm install -g forever ?forever的帮助手册 forever --help ?使用forever启动项目 forever start app.js ?使用forever停止项目 forever stop app.js ?列出所有通过forever管理的项目 forever list ?监视项目中的文件,当文件有变动时重启项目 forever -w s

Node.js的优点和缺点(转载)

著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:FengqiAsia链接:http://www.zhihu.com/question/19653241/answer/15993549来源:知乎 要讲清楚这个问题,先讲讲整个Web应用程序架构(包括流量.处理器速度和内存速度)中的瓶颈.瓶颈在于服务器能够处理的并发连接的最大数量.Node.js解决这个问题的方法是:更改连接到服务器的方式.每个连接发射一个在Node.js引擎的进程中运行的事件,而不是为每个连接生成一个新的O

node运维-pm2实现linux重启后自启动node服务

来源地址: https://blog.csdn.net/softwarenb/article/details/80269660 原因: 因为之前linux服务器因为cpu满了,还是系统崩了等等莫名的其他原因,会导致服务器重启,重启后,node还要我手动一个一个的开启,很麻烦. 虽然重启频率不高,但是,要重新发布项目会很麻烦,我希望重新启动后,自动开启node项目. 我半年时间,服务器经历了一次服务器被莫名的关机了,暂且找不到原因.还有一次是因为系统崩了,导致服务器重新启动. 简介 利用pm2非常

node工具之pm2

pm2 PM2是带有内置负载平衡器的Node.js应用程序的生产过程管理器.它使您可以使应用程序永远保持活动状态,无需停机即可重新加载它们,并简化常见的系统管理任务. 安装 npm install pm2 -g 常用命令 pm2 start app.js 开启进程 pm2 list 所有进程 pm2 stop <app_name|id|'all'|json_conf> / all 停止 pm2 restart <app_name|id|'all'|json_conf> 重启 pm2

告别win10,拥抱linux

安装linux操作系统 (?? . ??) win10 升级 先问你一个问题,你讨厌win10升级系统吗? 我的回答:是,明明已经把自动更新关闭了,可是还是会有"易升",win10易升一直卸载不掉.所以就想试试别的系统. linux是最好的选择.黑苹果暂时不考虑. 喜欢linux的理由 深度桌面 深度终端(配合zsh超赞的) 除了颜值外,程序兼容性会更好,安装各种东西会很方便.作为一名程序员,熟悉linux下基本操作也是必要的. 我自己试过,爬虫会跑的更快. 手动滑稽 选择linux哪

Node.js进程管理器PM2浅析

作者:zhanhailiang 日期:2014-11-02 PM2是Node.js应用程序的进程管理管理,目前已在生产环境被普遍使用,提供以下特性: Transitional state of apps Process listing Automatic restart process based on memory Monitoring CPU/Memory usage Logs management Clustering Watch & Restart Reloading without d

利用forever在Linux上实现Node.js项目自启动

在一台计算机上手动跑Node项目简单,node xx.js就搞定了,想让Node项目后台执行,尽管不能直接用node命令搞定,可是在安装了forever这个包以后.还是非常轻松的.只是要是在远程server上构建Node项目.假设没法自启动.一旦server重新启动,那么项目必须通过管理员远程手动开启才干够执行. 那么是否能利用forever加启动脚本方式解决上述问题呢?答案当然是肯定的.仅仅只是有点麻烦.并且forever官方缺少具体的配置文档.我在配置的时候也走了一些弯路,以下具体来说. 注