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 downtime
  • Make PM2 restart on server reboot
  • JSON app declaration

详情请见:

接下来介绍PM2的基本使用方法:

1. 安装PM2:

[root@~/wade/git/node-lessons/lesson1]# npm install pm2 -g

2. PM2功能集:

[[email protected]~/wade/git/node-lessons/lesson1]# pm2 -h

  Usage: pm2 [cmd] app

  Commands:

    start [options] <file|json|stdin>
       start and daemonize an app

    deploy <file|environment>
       deploy your json

    startOrRestart <json>
       start or restart JSON file

    startOrReload <json>
       start or gracefully reload JSON file

    startOrGracefulReload <json>
       start or gracefully reload JSON file

    stop [options] <id|name|all|json|stdin>
       stop a process (to start it again, do pm2 restart <app>)

    restart [options] <id|name|all|json|stdin>
       restart a process

    reload <name|all>
       reload processes (note that its for app using HTTP/HTTPS)

    gracefulReload <name|all>
       gracefully reload a process. Send a "shutdown" message to close all connections.

    delete <name|id|script|all|json|stdin>
       stop and delete a process from pm2 process list

    sendSignal <signal> <pm2_id|name>
       send a system signal to the target process

    ping
       ping pm2 daemon - if not up it will launch it

    updatePM2
       update in-memory PM2 with local PM2

    update
       (alias) update in-memory PM2 with local PM2

    interact [secret_key] [public_key] [machine_name]
       agent actions for keymetrics.io

    killInteract
       stop agent

    infoInteract
       get information about agent

    web
       launch an health API on port 9615

    dump
       dump all processes for resurrecting them later

    save
       (alias) dump all processes for resurrecting them later

    resurrect
       resurrect previously dumped processes

    startup <platform>
       auto resurrect process at startup. [platform] = ubuntu, centos, gentoo or systemd

    generate
       generate an ecosystem.json configuration file

    ecosystem
       generate an ecosystem.json configuration file

    reset <name|id|all>
       reset counters for process

    describe <id>
       describe all parameters of a process id

    desc <id>
       describe all parameters of a process id

    list
       list all processes

    ls
       (alias) list all processes

    l
       (alias) list all processes

    status
       (alias) list all processes

    jlist
       list all processes in JSON format

    prettylist
       print json in a prettified JSON

    monit
       launch termcaps monitoring

    m
       (alias) launch termcaps monitoring

    flush
       flush logs

    reloadLogs
       reload all logs

    logs [id|name]
       stream logs file. Default stream all logs

    ilogs
       advanced interface to display logs

    kill
       kill daemon

    * 

  Options:

    -h, --help                           output usage information
    -V, --version                        output the version number
    -v --version                         get version
    -s --silent                          hide all messages
    -m --mini-list                       display a compacted list without formatting
    -f --force                           force actions
    -n --name <name>                     set a <name> for script
    -i --instances <number>              launch [number] instances (for networked app)(load balanced)
    -o --output <path>                   specify out log file
    -e --error <path>                    specify error log file
    -p --pid <pid>                       specify pid file
    --max-memory-restart <memory>        specify max memory amount used to autorestart (in megaoctets)
    --env <environment_name>             specify environment to get specific env variables (for JSON declaration)
    -x --execute-command                 execute a program using fork system
    -u --user <username>                 define user when generating startup script
    -c --cron <cron_pattern>             restart a running process based on a cron pattern
    -w --write                           write configuration in local folder
    --interpreter <interpreter>          the interpreter pm2 should use for executing app (bash, python...)
    --log-date-format <momentjs format>  add custom prefix timestamp to logs
    --no-daemon                          run pm2 daemon in the foreground if it doesn‘t exist already
    --merge-logs                         merge logs from different instances but keep error and out separated
    --watch                              watch application folder for changes
    --node-args <node_args>              space delimited arguments to pass to node in cluster mode - e.g. --node-args="--debug=7001 --trace-deprecation"
    --run-as-user <run_as_user>          The user or uid to run a managed process as
    --run-as-group <run_as_group>        The group or gid to run a managed process as
    --no-color                           skip colors

  Basic Examples:

    Start an app using all CPUs available + set a name :
    $ pm2 start app.js -i max --name "api"

    Restart the previous app launched, by name :
    $ pm2 restart api

    Stop the app :
    $ pm2 stop api

    Restart the app that is stopped :
    $ pm2 restart api

    Remove the app from the process list :
    $ pm2 delete api

    Kill daemon pm2 :
    $ pm2 kill

    Update pm2 :
    $ npm install [email protected] -g ; pm2 updatePM2

    More examples in https://github.com/Unitech/pm2#usagefeatures

  Deployment help:

    $ pm2 deploy help

3. 使用PM2管理你的第一个Demo:

[root@~/wade/git/node-lessons/lesson1]# pm2 start app.js --name ‘firstapp‘
Starting PM2 daemon...
[PM2] Process app.js launched
┌──────────┬────┬──────┬──────┬────────┬───────────┬────────┬─────────────┬─────────────┐
│ App name │ id │ mode │ PID  │ status │ restarted │ uptime │      memory │    watching │
├──────────┼────┼──────┼──────┼────────┼───────────┼────────┼─────────────┼─────────────┤
│ firstapp │ 0  │ fork │ 6616 │ online │         0 │ 0s     │ 11.145 MB   │ unactivated │
└──────────┴────┴──────┴──────┴────────┴───────────┴────────┴─────────────┴─────────────┘
 Use `pm2 desc[ribe] <id>` to get more details
[root@~/wade/git/node-lessons/lesson1]# pm2 list
┌──────────┬────┬──────┬──────┬────────┬───────────┬────────┬─────────────┬─────────────┐
│ App name │ id │ mode │ PID  │ status │ restarted │ uptime │      memory │    watching │
├──────────┼────┼──────┼──────┼────────┼───────────┼────────┼─────────────┼─────────────┤
│ firstapp │ 0  │ fork │ 6616 │ online │         0 │ 10s    │ 18.539 MB   │ unactivated │
└──────────┴────┴──────┴──────┴────────┴───────────┴────────┴─────────────┴─────────────┘
 Use `pm2 desc[ribe] <id>` to get more details
^C[root@~/wade/git/node-lessons/lesson1]# pm2 desc firstapp
Describing process with pid 0 - name firstapp
┌───────────────────┬────────────────────────────────────────────┐
│ status            │ online                                     │
│ name              │ firstapp                                   │
│ id                │ 0                                          │
│ path              │ /root/wade/git/node-lessons/lesson1/app.js │
│ args              │                                            │
│ exec cwd          │ /root/wade/git/node-lessons/lesson1        │
│ error log path    │ /root/.pm2/logs/firstapp-err-0.log         │
│ out log path      │ /root/.pm2/logs/firstapp-out-0.log         │
│ pid path          │ /root/.pm2/pids/firstapp-0.pid             │
│ mode              │ fork_mode                                  │
│ node v8 arguments │                                            │
│ watch & reload    │ ?                                          │
│ interpreter       │ node                                       │
│ restarts          │ 0                                          │
│ unstable restarts │ 0                                          │
│ uptime            │ 58s                                        │
│ created at        │ 2014-11-02T08:43:36.834Z                   │
└───────────────────┴────────────────────────────────────────────┘
[root@~/wade/git/node-lessons/lesson1]# pm2 stop firstapp
[PM2] Stopping firstapp
[PM2] stopProcessId process id 0
┌──────────┬────┬──────┬──────┬─────────┬───────────┬────────┬────────┬─────────────┐
│ App name │ id │ mode │ PID  │ status  │ restarted │ uptime │ memory │    watching │
├──────────┼────┼──────┼──────┼─────────┼───────────┼────────┼────────┼─────────────┤
│ firstapp │ 0  │ fork │ 6616 │ stopped │         0 │ 0      │ 0 B    │ unactivated │
└──────────┴────┴──────┴──────┴─────────┴───────────┴────────┴────────┴─────────────┘
 Use `pm2 desc[ribe] <id>` to get more details
[root@~/wade/git/node-lessons/lesson1]# pm2 kill
[PM2] Stopping PM2...
[PM2] Deleting all process
[PM2] deleteProcessId process id 0
[PM2] All processes has been stopped and deleted
[PM2] PM2 stopped

推荐阅读:

时间: 2024-11-16 04:07:35

Node.js进程管理器PM2浅析的相关文章

Node.js包管理器Yarn的入门介绍与安装

FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在昨天, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .咱虽然是个半桶水的咸鱼前端,不过也得跟上 Javascript 这股潮 (hong) 流 (huang) 的脚步,所以便有了下面这篇文章.大概的浅尝了一下这个自称是又快又可信赖又安全的包管理,所以写的内容不会很详细,更多的可能只是针对这个全新的包管理与 npm 的不同之处来对比.也可能有些地方写得不对

node.js教程基础:node.js包管理器

Node.js 包管理器 Node程序包管理器提供了两个主要功能: 1) 它提供了可在search.nodejs.org上搜索的node.js软件包/模块的在线存储库. 2) 它还提供了命令行实用程序,用于安装Node.js软件包,执行版本管理和Node.js软件包的依赖关系管理. 在v0.6.3之后的版本中,npm与Node.js可安装程序捆绑在一起. 您可以通过打开Node.js命令提示符并键入以下命令来检查版本: npm version 使用npm安装模块 以下是安装任何Node.js模块

Node.js进程管理之Process模块

在前面Node.js事件运行机制也有提到,Node.js应用在单个线程运行,但是现在大部分服务器都是多处理器,为了方便使用多个进程,Node.js提供了3个模块.Process模块提供了访问正在运行的进程.child_process模块可以创建子进程,并与他们通信.cluster模块提供了实现共享相同端口的集群服务能力,允许多个请求同时处理. 一.Process模块是一个无须使用require()就可以从node.js应用程序进行访问的全局对象. 二.进程I/O管道 Process为进程stdi

9.Node.js 包管理器npm

npm 是 Node.js  官方提供的包管理工具, 用于 Node.js包的发布.传播.依赖控制 安装 express ==> 流行的基于Node.js的Web开发框架,可以快速地搭建一个完整功能的网站. $ npm install express 包的发布 , 创建符合 npm  规范的 package.json  文件 $ npm init 输入命令后,会生成package.json文件 package name: (byvoidmodule) alan version: (1.0.0)

Node.js包管理器:

当我们要把某个包作为工程运行的一部分时,通过本地模式获取,如果要在命令行下使用,则使用全局模式安装 使用全局模式安装的包并不能直接在JavaScript文件中用require获得,因为require不会搜索/usr/local/lib/node_modules/ 创建全局链接:npm link (windows不支持npm link) 它的功能是在本地包和全局包之间创建符号链接,例如,我们已经通过npm install -g express 安装了express ,这时在工程 目录下,运行命令:

Node.js进程通信模块child_process

前言 Node.js是一种单线程的编程模型,对Node.js的赞美和诟病的也都是因为它的单线程模型,所有的任务都在一个线程中完成(I/O等例外).单线程模型,不仅让代码非常简洁,更是直接避免了线程调度的复杂性:同样也是因为单线程,让CPU密集型计算应用,完全不适用. 在Node.js的内核中,给了我们一种新的选择,通过child_process模块创建新进程,从而实现多核并行计算. 目录 child_process介绍 child_process的基本使用:spawn, exec, execFi

PHP FastCGI进程管理器PHP-FPM的架构

PHP FastCGI进程管理器PHP-FPM的架构 一个master进程,支持多个pool,每个pool由master进程监听不同的端口,pool中有多个worker进程. 每个worker进程都内置PHP解释器,并且进程常驻后台,支持prefork动态增加. 每个worker进程支持在运行时编译脚本并在内存中缓存生成的opcode来提升性能. 每个worker进程支持配置响应指定请求数后自动重启,master进程会重启挂掉的worker进程. 每个worker进程能保持一个到MySQL/Me

NET Core 静态文件及JS包管理器(npm, Bower)的使用

NET Core 静态文件及JS包管理器(npm, Bower)的使用 文章目录 在 ASP.NET Core 中添加静态文件 使用npm管理JavaScript包 使用Bower管理JavaScript包 在 ASP.NET Core 中添加静态文件 虽然ASP.NET主要大都做着后端的事情,但前端的一些静态文件也是很重要的.在ASP.NET Core中要启用静态文件,需要Microsoft.AspNetCore.StaticFiles组件.可以通过Nuget添加,或者在project.jso

FastCGI 进程管理器(FPM)

FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的. 它的功能包括: 支持平滑停止/启动的高级进程管理功能: 可以工作于不同的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的设置): stdout 和 stderr 日志记录; 在发生意外情况的时候能够重新启动并缓存被破坏的 opcode; 文件上传优化支持; "慢日志" - 记录脚本(不仅记录文