请使用firefox,chrome等最新浏览器浏览本站。

pm2管理node进程

html5 阿豹 339次浏览 0个评论 扫描二维码

PM2是一个带有负载均衡功能的Node应用的进程管理器。PM2可以利用服务器上的所有CPU,并保证进程永远都活着,0秒的重载,部署管理多个Node项目。PM2是Node线上部署完美的管理工具。可以用来在生产环境中进行自动重启、日志记录、错误预警等等。

单线程JavaScrip的脆弱性

传统Web服务器会为每一个HTTP请求创建线程,因而线程发生异常不会影响到整个服务器进程。 然而JavaScript天生是单线程的,任何未捕获异常都会造成进程异常退出。 这也是我们需要pm2的关键原因。

安装

sudo cnpm install -g pm2

基本命令

// 启动node服务
pm2 start ./bin/www –name name –watch

-name参数 用来给这个进程命名
–watch参数 监控文件变化自动重启node服务

WX20170610-154109@2x

启动之后,显示了一个表格:

App name:就是-n命名的名称
id:就是分配的 id 序号
mode:启动模式,默认是 fork,也可以是 cluster
pid:进程的 pid
status:当前进程的状态,如果进程崩溃到无法启动,那么值就是 offline
restart:重启次数
uptime:启动之后的在线时间

pm2 start app.js –max_memory_restart 1024M : 当内存超过1024M时自动重启。 如果工程中有比较棘手的内存泄露问题,这个算是一个折中方案。
pm2 stop [name or id] :停止指定的进程。
pm2 restart [name or id] : 重启服务。
pm2 reload [name or id] : 和restart功能相同,但是可以实现0s的无缝衔接;如果有nginx的使用经验,可以对比nginx reload指令。
pm2 delete [id] :杀死指定的进程。
pm2 delete all :杀死全部进程。
pm2 list :显示所有进程状态。
pm2 monit :对服务进行监控。
pm2 logs [name or id] :查看指定进程日志。
pm2 logs:查看所有进程日志。

配置项

name 应用进程名称

script 启动脚本路径

cwd 应用启动的路径,关于script与cwd的区别举例说明:在/home/polo/目录下运行/data/release/node/
index.js,此处script为/data/release/node/index.js,cwd为/home/polo/

args 传递给脚本的参数

interpreter 指定的脚本解释器

interpreter_args 传递给解释器的参数

instances 应用启动实例个数,仅在cluster模式有效,默认为fork

exec_mode 应用启动模式,支持fork和cluster模式

watch 监听重启,启用情况下,文件夹或子文件夹下变化应用自动重启

ignore_watch 忽略监听的文件夹,支持正则表达式

max_memory_restart 最大内存限制数,超出自动重启

env 环境变量,object类型,如{“NODE_ENV”:”production”, “ID”: “42”}

log_date_format 指定日志日期格式,如YYYY-MM-DD HH:mm:ss

error_file 记录标准错误流,$HOME/.pm2/logs/XXXerr.log),代码错误可在此文件查找

out_file 记录标准输出流,$HOME/.pm2/logs/XXXout.log),如应用打印大量的标准输出,会导致pm2日志过大

min_uptime 应用运行少于时间被认为是异常启动

max_restarts 最大异常重启次数,即小于min_uptime运行时间重启次数

autorestart 默认为true, 发生异常的情况下自动重启

cron_restart crontab时间格式重启应用,目前只支持cluster模式

force 默认false,如果true,可以重复启动一个脚本。pm2不建议这么做

restart_delay 异常重启情况下,延时重启时间

配置项使用:
pm2 start app.js –name name –max_memory_restart 1024M

添加启动配置文件

如果配置项过多,可以添加配置文件

pm2 ecosystem :生成配置文件ecosystem.json。
pm2 start | restart ecosystem.json :通过配置文件启动服务。

示例:

{
  apps : [
    // First application
    {
      name      : 'hongkong.web.h5',
      script    : '/bin/www',
      max_memory_restart: "300M",
      out_file : "/logs/nova_out.log",
      error_file : "/logs/nova_error.log",
      instances  : 4,
      exec_mode  : "cluster",
      env_production : {
        NODE_ENV: 'production'
      }
    }
  ]
 }

稳定运行建议

PM2是一款非常优秀的Node进程管理工具,它有着丰富的特性:能够充分利用多核CPU且能够负载均衡、能够帮助应用在崩溃后、指定时间(cluster model)和超出最大内存限制等情况下实现自动重启。

个人几点看法保证常驻应用进程稳定运行:

定时重启,应用进程运行时间久了或许总会产生一些意料之外的问题,定时可以规避一些不可测的情况;

最大内存限制,根据观察设定合理内存限制,保证应用异常运行;

合理min_uptime,min_uptime是应用正常启动的最小持续运行时长,超出此时间则被判定为异常启动;

设定异常重启延时restart_delay,对于异常情况导致应用停止,设定异常重启延迟可防止应用在不可测情况下不断重启的导致重启次数过多等问题;

设置异常重启次数,如果应用不断异常重启,并超过一定的限制次数,说明此时的环境长时间处于不可控状态,服务器异常。此时便可停止尝试,发出错误警告通知等。


转载请注明pm2管理node进程
喜欢 (1)or分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到