pm2常⽤的命令⽤法介绍
pm2 是⼀个带有负载均衡功能的Node应⽤的进程管理器.当你要把你的独⽴代码利⽤全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的,下⾯我们来看pm2常⽤的命令⽤法介绍吧。
PM2 (github上的源码)是开源的基于Nodejs的进程管理器,包括守护进程,监控,⽇志的⼀整套完整的功能,基本是Nodejs应⽤程序不⼆的守护进程选择,事实上它并不仅仅可以启动Nodejs的程序,只要是⼀般的脚本的程序它同样可以胜任。
以下是pm2常⽤的命令⾏:
$ pm2 start app.js # 启动app.js应⽤程序
$ pm2 start app.js -i 4 # cluster mode 模式启动4个app.js的应⽤实例 # 4个应⽤程序会⾃动进⾏负载均衡
$ pm2 start app.js --name="api" # 启动应⽤程序并命名为"api"
$ pm2 start app.js --watch # 当⽂件变化时⾃动重启应⽤
$ pm2 start script.sh # 启动 bash 脚本
$ pm2 list # 列表 PM2 启动的所有的应⽤程序
$ pm2 monit # 显⽰每个应⽤程序的CPU和内存占⽤情况
$ pm2 show [app-name] # 显⽰应⽤程序的所有信息
$ pm2 logs # 显⽰所有应⽤程序的⽇志
$ pm2 logs [app-name] # 显⽰指定应⽤程序的⽇志
$ pm2 flush
$ pm2 stop all # 停⽌所有的应⽤程序
$ pm2 stop 0 # 停⽌ id为 0的指定应⽤程序
$ pm2 restart all # 重启所有应⽤
$ pm2 reload all # 重启 cluster mode下的所有应⽤
$ pm2 gracefulReload all # Graceful reload all apps in cluster mode
$ pm2 delete all # 关闭并删除所有应⽤
$ pm2 delete 0 # 删除指定应⽤id0
$ pm2 scale api 10 # 把名字叫api的应⽤扩展到10个实例
$ pm2 reset [app-name] # 重置重启数量
$ pm2 startup # 创建开机⾃启动命令
$ pm2 save # 保存当前应⽤列表
$ pm2 resurrect # 重新加载保存的应⽤列表
$ pm2 update # Save processes, kill PM2 and restore processes
$ pm2 generate # Generate a sample json configuration file
$ pm2 deploy app.json prod setup # Setup "prod" remote server
$ pm2 deploy app.json prod # Update "prod" remote server
$ pm2 deploy app.json prod revert 2 # Revert "prod" remote server by 2
$ pm2 module:generate [name] # Generate sample module with name [name]
$ pm2 install pm2-logrotate # Install module (here a log rotation system)
$ pm2 uninstall pm2-logrotate # Uninstall module
$ pm2 publish # Increment version, git push and npm publish
⼀.安装
全局安装,简直不能更简单。
n pm install -g pm2
pm2安装好后,会⾃动创建下⾯⽬录。看⽂件名基本就知道⼲嘛的。
$HOME/.pm2 will contain all PM2 related files
$HOME/.pm2/logs will contain all applications logs
$HOME/.pm2/pids will contain all applications pids
git常用指令$HOME/.pm2/pm2.log PM2 logs
$HOME/.pm2/pm2.pid PM2 pid
$HOME/.pm2/rpc.sock Socket file for remote commands
$HOME/.pm2/pub.sock Socket file for publishable events
$HOME/.pm2/conf.js PM2 Configuration
⼆.⼊门教程
挑我们最爱的express应⽤来举例。⼀般我们都是通过npm start启动应⽤,其实就是调⽤node ./bin/www。那么,换成pm2就是
pm2 start ./bin/www –watch
注意,这⾥⽤了–watch参数,意味着当你的express应⽤代码发⽣变化时,pm2会帮你重启服务,多贴⼼。
参数说明:
--watch:监听应⽤⽬录的变化,⼀旦发⽣变化,⾃动重启。如果要精确监听、不见听的⽬录,最好通过配置⽂件。
-i --instances:启⽤多少个实例,可⽤于负载均衡。如果-i 0或者-i max,则根据当前机器核数确定实例数⽬。
--ignore-watch:排除监听的⽬录/⽂件,可以是特定的⽂件名,也可以是正则。⽐如--ignore-watch="test node_modules "some scripts""
-n --name:应⽤的名称。查看应⽤信息的时候可以⽤到。
-o --output <path>:标准输出⽇志⽂件的路径。
-e --error <path>:错误输出⽇志⽂件的路径。
-
-interpreter <interpreter>:the interpreter pm2 should use for executing app (bash, )。⽐如你⽤的coffee script来编写应⽤。
三.重启
pm2 restart app.js
四.停⽌
停⽌特定的应⽤。可以先通过pm2 list获取应⽤的名字(–name指定的)或者进程id。
pm2 stop app_name|app_id
如果要停⽌所有应⽤,可以
pm2 stop all
五.查看进程状态
pm2 list
六.配置⽂件
配置⽂件⾥的设置项,跟命令⾏参数基本是⼀⼀对应的。可以选择yaml或者json⽂件,就看个⼈洗好了。json格式的配置⽂件,pm2当作普通的js⽂件来处理,所以可以在⾥⾯添加注释或者编写代码,这对于动态调整配置很有好处。
如果启动的时候指定了配置⽂件,那么命令⾏参数会被忽略。(个别参数除外,⽐如--env)
举个简单例⼦,完整配置说明请参考官⽅⽂档。
{
“name” : “fis-receiver”, // 应⽤名称
“script” : “./bin/www”, // 实际启动脚本
“cwd” : “./”, // 当前⼯作路径
“watch”: [ // 监控变化的⽬录,⼀旦变化,⾃动重启
“bin”,
“routers”
],
“ignore_watch” : [
// 从监控⽬录中排除
“node_modules”,
“logs”,
“public”
],
“watch_options”: {
“followSymlinks”: false
},
“error_file” : “./logs/app-err.log”, // 错误⽇志路径
“out_file” : “./logs/app-out.log”, // 普通⽇志路径
“env”: {
“NODE_ENV”: “production” // 环境参数,当前指定为⽣产环境
}
}
七.pm2 start app.js –watch
这⾥是监控整个项⽬的⽂件,如果只想监听指定⽂件和⽬录,建议通过配置⽂件的watch、ignore_watch字段来设置。
⼋.环境切换
在实际项⽬开发中,我们的应⽤经常需要在多个环境下部署,⽐如开发环境、测试环境、⽣产环境等。在不同环境下,有时候配置项会有差异,⽐如链接的数据库地址不同等。
对于这种场景,pm2也是可以很好⽀持的。⾸先通过在配置⽂件中通过env_xx来声明不同环境的配置,
然后在启动应⽤时,通过–env 参数指定运⾏的环境。
⾸先,在配置⽂件中,通过env选项声明多个环境配置如下:
“env”: { “NODE_ENV”: “production”, “REMOTE_ADDR”: “ample/” },
”env_dev”: { “NODE_ENV”: “development”, “REMOTE_ADDR”: “ample/” },
”env_test”: { “NODE_ENV”: “test”, “REMOTE_ADDR”: “ample/” }
env为默认的环境配置(⽣产环境),env_dev、env_test则分别是开发、测试环境。可以看到,不同环境下的NODE_ENV、REMOTE_ADDR字段的值是不同的。
在应⽤中,可以通过v.REMOTE_ADDR等来读取配置中⽣命的变量。
pm2 start app.js –env dev
九.负载均衡
命令如下,表⽰开启三个进程。如果-i 0,则会根据机器当前核数⾃动开启尽可能多的进程。
pm2 start app.js -i 3 # 开启三个进程
p m2 start app.js -i max # 根据机器CPU核数,开启对应数⽬的进程
⼗.⽇志查看
除了可以打开⽇志⽂件查看⽇志外,还可以通过pm2 logs来查看实时⽇志。这点对于线上问题排查⾮常重要。
⽐如某个node服务突然异常重启了,那么可以通过pm2提供的⽇志⼯具来查看实时⽇志,看是不是脚本出错之类导致的异常重启。
⼗⼀.开机⾃动启动
可以通过pm2 startup来实现开机⾃启动。细节可参考。⼤致流程如下:
1.通过pm2 save保存当前进程状态。
2.通过pm2 startup [platform]⽣成开机⾃启动的命令。(记得查看控制台输出)
3.将步骤2⽣成的命令,粘贴到控制台进⾏,搞定。
假设是在centos下,那么运⾏如下命令,搞定。强烈建议运⾏完成之后,重启机器,看是否设置成功。
[root@iZ94wb7tioqZ option_analysis]# pm2 save
[root@iZ94wb7tioqZ option_analysis]# pm2 startup centos
[PM2] Generating system init script in /etc/init.d/pm2-init.sh
[PM2] Making script booting at startup…
[PM2] /var/lock/subsys/pm2-init.sh lockfile has been added
[PM2] -centos- Using the command:
su -c “chmod +x /etc/init.d/pm2-init.sh; chkconfig –add pm2-init.sh”
[PM2] Done.
[root@iZ94wb7tioqZ option_analysis]# pm2 save
[PM2] Dumping processes
⼗⼆.监控(monitor)
运⾏如下命令,查看当前通过pm2运⾏的进程的状态。
pm2 monit
看到类似输出
[root@oneday-dev0 server]# pm2 monit
PM2 monitoring (To go further check out app.keymetrics.io) [ ] 0 %
P M2 monitoring (To go further check o[||||||||||||||| ] 196.285 MB
● fis-receiver [ ] 0 % [1] [fork_mode] [||||| ] 65.773 MB
● www [ ] 0 % [2] [fork_mode] [||||| ] 74.426 MB
● oc-server [ ] 0 % [3] [fork_mode] [|||| ] 57.801 MB
● pm2-http-interface [ ] stopped
[4] [fork_mode] [ ] 0 B
● start-production
[5] [fork_mode]
⼗三.内存使⽤超过上限⾃动重启
如果想要你的应⽤,在超过使⽤内存上限后⾃动重启,那么可以加上–max-memory-restart参数。(有对应的配置项)pm2 start big-array.js –max-memory-restart 20M
⼗四.pm2 + nginx
⽆⾮就是在nginx上做个反向代理配置,直接贴配置。
upstream my_nodejs_upstream {
server 127.0.0.1:3001;
}
server {
listen 80;
server_name my_nodejs_server;
root /home/www/project_root;
location / {
proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for;
proxy_set_header Hostproxy_add_x_forwarded_for;
proxy_set_header Hosthttp_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
proxy_max_temp_file_size 0;
proxy_pass my_nodejs_upstream/;
proxy_redirect off;
proxy_read_timeout 240s;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论