Pm2是一个具有负载平衡功能的Node应用程序的进程管理器。当你想对所有服务器上的所有CPU使用你的独立代码,并确保进程始终是活动的,PM2是0秒过载的完美选择。
PM2是一个基于Nodejs的开源进程管理器,它包含了守护进程、监控和日志记录等一整套功能。PM2基本上是Nodejs应用程序的完美守护进程选择。事实上,PM2不仅可以启动Nodejs程序,而且只要是一般的脚本程序都可以胜任。
主要特点:
内置负载平衡(使用Node cluster集群模块)在后台运行0秒的关机重装(此功能允许您在不丢失请求的连接的情况下重装代码。)用Ubuntu和CentOS启动脚本,停止不稳定的进程(避免无限循环)。控制台检测提供HTTP API远程控制和实时接口API (Nodejs模块,允许与PM2进程管理器交互)。使用环境:
它只能用于在Node 0.11.x版本和集群模式(默认模式)安装下运行的web应用程序
安装npm install -g pm2pm2后,将自动创建以下目录:
/. PM2/. PM2/logs/. PM2/pids/. PM2/PM2 . log/. PM2/PM2 . PID/. PM2/RPC . sock/. PM2/pub . sock/. PM2/conf . js用法
npm install pm2 -g #命令行安装pm2 pm2 start app.js -i 4 #在后台运行pm2。Start 4 app.js #或传递' max '参数启动#。进程的正确数量取决于Cpu内核的数量。pm2StartApp.js-name my-API # Name进程pm2列表#显示所有进程状态pm2 monit #监控所有进程pm2日志#显示所有进程日志pm2停止所有#停止所有进程pm2重新启动所有#重新启动所有进程pm2重新加载所有# 0秒停止重新加载进程(对于联网进程)pm2停止0 #停止指定进程pm2重新启动0 #重新启动指定进程PM2启动#生成初始化脚本保持进程活动pm2 web # 运行健壮的计算机API端点(http://localhost 33609615)pm2删除0 #删除指定的进程PM2删除所有#以不同方式删除所有进程:
$ pm2 start app.js -i max #根据有效CPU数量启动最大数量的进程$ pm2 start app.js -i 3 #启动三个进程$ pm2 start app.js -x #以分叉模式启动app.js而不是使用cluster $ pm2startapp.js-x-a 23 #以分叉模式启动app.js并传递参数(-a 23)$ PM2 Start app . js-name server one #启动一个进程并将其命名为server one $ PM2 stop server one # stop server one在app.json-A 23 #中设置选项$ pm2startapp.js-imax将参数$ PM2 startapp.js-IMAX-eerr . log-oout . log #传递给app . js后- Start并生成配置文件。您还可以执行用其他语言编写的应用程序(fork模式): $ PM2 start my-bash-script . sh-x-解释器bash $ PM2 start my-python-script . py-x-解释器python pm2list
列出pm2管理的所有进程信息,还显示一个进程因未处理的异常而启动的次数。
pm2 monit
监控每个节点进程的CPU和内存使用情况。
入门教程
以我们最喜欢的快递应用为例。通常,我们通过npm start启动应用程序,但实际上是调用node。/bin/www .然后,换成pm2
Pm2开始。/bin/wwwwatch此处使用watch参数,这意味着当您的快速应用程序代码发生变化时,PM2将帮助您重新启动服务。
参数描述:
- watch:监控应用目录的变化,一旦发生变化,自动重启。如果你想准确的听你听不到的目录,最好使用配置文件。-I-instances:为负载平衡启用了多少个实例。如果-i 0或-i max,则根据当前的机器内核数量确定实例数量。- ignore-watch:从侦听中排除的目录/文件可以是特定的文件名,也可以是常规的。例如-ignore-watch=' test node _ modules '某些脚本' '-n-name:应用程序的名称。它可以在查看应用程序信息时使用。-o-outputpath:标准输出日志文件的路径。-e-errorpath:错误输出日志文件的路径。-解释器解释器:解释器pm2应该用于执行app (bash,python.)。例如,您使用coffee脚本编写应用程序。命令行参数的完整列表:
PM2 startapp . jswatch-I 2配置文件
配置文件中的设置基本上与命令行参数一一对应。你可以选择yaml或者json文件,由你来洗。json格式的配置文件pm2被当作一个普通的js文件,可以在里面添加注释或者编写代码,非常有利于动态调整配置。如果在启动时指定了配置文件,命令行参数将被忽略。(除了个别参数,如- env)举一个简单的例子:
{'name' : 'fis-receiver ',//应用程序名称' script' : '。/bin/www ',//实际启动脚本' cwd' : '。/',//当前工作路径' watch': [//监控更改的目录。路由器'],' ignore _ watch ' :[//排除' node _ modules ',' log ',' public'],' watch _ options ' : { ' follow symlink ' : false },Error _ file' : '。/logs/app-err.log ',//错误日志路径' out _ file' :/logs/app-out.log ',//公共日志路径' env ' : {'node _ env' :' production '//环境变量,对象类型,如{ ' node _ env ' : ' production ',' id ' : ' 42 ' };}、“实例数”:“最大值”、//打开的进程数,可以是数字或最大值。与服务器cpu内核的数量有关。应用程序启动实例数仅在集群模式下有效,默认值为fork;Exec_mode' : 'cluster' //应用启动模式,支持分叉和集群模式。集群(多核推荐)' min_uptime': '60s ',//应用运行时间不足视为异常启动;Max _ restarts ' : 30,//最大异常重启次数,即重启次数小于min _ uptimeMax _ memory _ restart' :' 300m ',//最大内存限制超过自动重启;Autorestart': true,//默认为true,出现异常自动重启;}自定义启动文件,并使用以下格式创建test.json示例文件:
{ 'apps':[ { 'name': 'test ',' cwd': '/data/wwwroot/nodejs ',' script': '。/test.sh ',' exec_interpreter': 'bash ',' min_uptime': '60s ',' max _ restarts ' : 30,' exec_mode' : 'cluster_mode ',' error_file' : '。/test-err.log ',Out _ file' : '。/test-out.log ',' PID _ file' : '。/test.pid'' watch' : false}]}参数描述:
Apps:json结构,Apps是一个数组,每个数组成员对应一个运行在pm2中的应用。名称:应用程序名称cwd:应用程序所在的目录脚本:应用程序脚本路径exec_interpreter:应用程序脚本类型,这里使用的shell,默认为nodejs min_uptime:最小运行时间。这里的设置是60s,即应用程序在60s内退出,pm2会认为程序异常退出,max _ restarts的设置次数默认设置为true,异常自动重启。Max _ restarts:设置应用程序异常退出和重启的次数,默认值为15次(从0开始计算)。exec_mode:这里设置了应用启动模式,默认为fork error_file:自定义应用的错误日志文件out_file:自定义应用日志文件pid_file:自定义应用的pid文件。watch:是否启用监控模式,默认为false。如果设置为true,当应用程序改变时,pm2将自动重新加载。您也可以在这里设置要监控的文件。Max_memory_restart:当内存超过设定量时自动重启。如果项目中存在棘手的内存泄漏问题,这是一种妥协。实例:为负载平衡启用了多少个实例。仅在集群模式下有效,默认为fork;Cron_restart crontab时间格式,定期重启应用,目前仅支持集群模式;运行示例:以上面的test.json为例
Pm2 start test.json环境切换
在实际的项目开发中,我们的应用程序经常需要部署在多个环境中,例如开发环境、测试环境和生产环境。在不同的环境中,有时配置项是不同的,例如不同的链接数据库地址。
对于这个场景,pm2也可以很好的支持。首先在配置文件中通过env_xx声明不同环境的配置,然后在启动应用时通过env参数指定运行环境。
首先,在配置文件中,通过env选项声明了多个环境配置。简要说明:
Env是默认的环境配置(生产环境),env_dev和env_test分别是开发和测试环境。可以看出,在不同的环境中,NODE_ENV和REMOTE_ADDR字段的值是不同的。
在应用中,配置中的生命变量可以通过process.env.REMOTE_ADDR等读取。
例如:
ENV ' : { ' NODE _ ENV ' : ' production ',' REMOTE _ ADDR ' : ' http://www . example.com/' } ' ENV _ dev ' : { ' NODE _ ENV ' : ' development ',' REMOTE _ addr ' : ' http://wdev.example.com/'}' ENV _ test ' 3: { ' NODE _ ENV ' 3: ' test ',' REMOTE _ addr ' 33: http://wtest.example.com/}启动指示环境:假设如下
Pm2startapp.js-envdev负载平衡
命令如下,意思是打开三个进程。如果-i 0,将根据机器当前的内核数量自动启动尽可能多的进程。
M2 start app.js -i 3 #打开三个进程pm2 start app.js -i max #根据机器的CPU内核数量打开相应数量的进程日志
除了打开日志文件查看日志,还可以通过pm2日志查看实时日志。这对在线故障排除非常重要。
比如节点服务突然异常重启,可以通过pm2提供的日志工具查看实时日志,看看异常重启是不是脚本错误导致的。
pm2日志的自动启动
自启动可以通过pm2启动来实现。一般流程如下:
通过pm2 save保存当前流程状态。
通过pm2启动[平台]生成引导和自启动的命令。(记得检查控制台输出)
将步骤2中生成的命令粘贴到控制台并完成。
自动重新启动应用程序
Fork不支持定时重启,而集群支持定时重启。计划重启是配置中的cron_restart配置项。
监视器
运行以下命令查看当前通过pm2运行的进程的状态。
Pm2监控内存使用超过上限,并自动重新启动
如果希望应用程序在超过内存限制后自动重新启动,可以添加max-max-memory-restart参数。(有相应的配置项)
pm2启动大数组. js最大内存重启20MWeb API
如果不仅要监控pm2管理的进程,还要监控运行该进程的机器的信息,可以使用下面的API。
Pm2 webpm2将启动一个名为pm2-http-interface的进程来提供web服务。你打开浏览器,输入http://127.0.0.1:9615。你对结果感到惊讶吗?
pm2和永远的比较
关于功能永久稳定运行的建议PM2保活咖啡脚本日志聚合API终端监控集群JSON配置
PM2是一款优秀的Node进程管理工具,具有丰富的特性:可以充分利用多核CPU和负载均衡,在崩溃后、指定集群模型时、超过最大内存限制时,可以帮助应用自动重启。
确保居民申请流程稳定运行之我见;
定期重启,应用进程长时间运行后可能总会出现一些意想不到的问题,定时可以避免一些不可预知的情况;最大内存限制,根据观察设定合理的内存限制,保证应用异常运行;合理的min_uptime,min_uptime是应用程序正常启动的最小连续运行时间,超过这个时间就判断为异常启动;设置非正常重启延迟restart_delay,可以防止应用在不可预知的情况下持续重启,导致重启次数过多。设置异常重启时间。如果应用程序持续异常重启并超过一定的限制数,则意味着环境长期处于不可控状态,服务器出现异常。这时可以停止尝试,发出错误警告通知等等。与主管比较
Supervisor修改命令后可以重启应用,但关闭控制台后,整个过程挂起。Pm2可以在后台运行,关闭控制台后进程不会受到影响。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。