pm2使用文档

查看某个进程的信息

  1. [root@iZ94wb7tioqZ pids]# pm2 describe 0 Describing process with id 0 - name oc-server

  2. ┌───────────────────┬──────────────────────────────────────────────────────────────┐

  3. │ status │ online │

  4. │ name │ oc-server │

  5. │ id │ 0 │

  6. │ path │ /data/file/qiquan/over_the_counter/server/bin/www │

  7. │ args │ │

  8. │ exec cwd │ /data/file/qiquan/over_the_counter/server │

  9. │ error log path │ /data/file/qiquan/over_the_counter/server/logs/app-err-0.log │

  10. │ out log path │ /data/file/qiquan/over_the_counter/server/logs/app-out-0.log │

  11. │ pid path │ /root/.pm2/pids/oc-server-0.pid │

  12. │ mode │ fork_mode │

  13. │ node v8 arguments │ │

  14. │ watch & reload │ │

  15. │ interpreter │ node │

  16. │ restarts │ 293 │

  17. │ unstable restarts │ 0 │

  18. │ uptime │ 87m │

  19. │ created at │ 2016-08-26T08:13:43.705Z │

  20. └───────────────────┴──────────────────────────────────────────────────────────────┘

配置文件


简单说明

  • 配置文件里的设置项,跟命令行参数基本是一一对应的。

  • 可以选择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

这里是监控整个项目的文件,如果只想监听指定文件和目录,建议通过配置文件的watchignore_watch字段来设置。

环境切换


在实际项目开发中,我们的应用经常需要在多个环境下部署,比如开发环境、测试环境、生产环境等。在不同环境下,有时候配置项会有差异,比如链接的数据库地址不同等。

对于这种场景,pm2也是可以很好支持的。首先通过在配置文件中通过env_xx来声明不同环境的配置,然后在启动应用时,通过--env参数指定运行的环境。

环境配置声明

首先,在配置文件中,通过env选项声明多个环境配置。简单说明下:

  • env为默认的环境配置(生产环境),env_devenv_test则分别是开发、测试环境。可以看到,不同环境下的NODE_ENVREMOTE_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": { "NODE_ENV": "test", "REMOTE_ADDR": "http://wtest.example.com/" }

启动指明环境

假设通过下面启动脚本(开发环境),那么,此时process.env.REMOTE_ADDR的值就是相应的 http://wdev.example.com/ ,可以自己试验下。

pm2 start app.js --env dev

负载均衡


命令如下,表示开启三个进程。如果-i 0,则会根据机器当前核数自动开启尽可能多的进程。

pm2 start app.js -i 3 # 开启三个进程

​pm2 start app.js -i max # 根据机器CPU核数,开启对应数目的进程

参考文档:点击查看

日志查看


除了可以打开日志文件查看日志外,还可以通过pm2 logs来查看实时日志。这点对于线上问题排查非常重要。

比如某个node服务突然异常重启了,那么可以通过pm2提供的日志工具来查看实时日志,看是不是脚本出错之类导致的异常重启。

pm2 logs

指令tab补全


运行pm2 --help,可以看到pm2支持的子命令还是蛮多的,这个时候,自动完成的功能就很重要了。

运行如下命令。恭喜,已经能够通过tab自动补全了。细节可参考这里

pm2 completion install source ~/.bash_profile

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

开机自动启动


可以通过pm2 startup来实现开机自启动。细节可参考。大致流程如下

  1. 通过pm2 save保存当前进程状态。

  2. 通过pm2 startup [platform]生成开机自启动的命令。(记得查看控制台输出)

  3. 将步骤2生成的命令,粘贴到控制台进行,搞定。

传入node args


直接上例子,分别是通过命令行和配置文件。

命令行:

pm2 start app.js --node-args=“–harmony”

配置文件:

{ “name” : “oc-server”, “script” : “app.js”, “node_args” : “–harmony” }

实例说明

假设是在centos下,那么运行如下命令,搞定。强烈建议运行完成之后,重启机器,看是否设置成功。

  1. [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

  2. [PM2] Making script booting at startup...

  3. [PM2] /var/lock/subsys/pm2-init.sh lockfile has been added

  4. [PM2] -centos- Using the command:

  5. su -c "chmod +x /etc/init.d/pm2-init.sh; chkconfig --add pm2-init.sh" ​[PM2] Done.

  6. [root@iZ94wb7tioqZ option_analysis]# pm2 save ​[PM2] Dumping processes

远程部署


可参考官方文档,配置也不复杂,用到的时候再来填写这里的坑。TODO

官方文档:http://pm2.keymetrics.io/docs/usage/deployment/#getting-started

监控(monitor)


运行如下命令,查看当前通过pm2运行的进程的状态。

pm2 monit

看到类似输出

  1. [root@oneday-dev0 server]# pm2 monit ⌬ ​ PM2 monitoring (To go further check out https://app.keymetrics.io) [ ] 0 % ⌬ ​PM2 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

  2. [4] [fork_mode] [ ] 0 B ​● start-production

  3. [5] [fork_mode]

内存使用超过上限自动重启


如果想要你的应用,在超过使用内存上限后自动重启,那么可以加上--max-memory-restart参数。(有对应的配置项)

pm2 start big-array.js --max-memory-restart 20M

更新pm2


官方文档:http://pm2.keymetrics.io/docs/usage/update-pm2/#updating-pm2

$ pm2 save # 记得保存进程状态

​$ npm install pm2 -g

​$ pm2 update

pm2 + nginx


无非就是在nginx上做个反向代理配置,直接贴配置。

  1. upstream my_nodejs_upstream { server 127.0.0.1:3001;

  2. } 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 Host $http_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 http://my_nodejs_upstream/; proxy_redirect off; proxy_read_timeout 240s;

  3. }

  4. }

官方文档:http://pm2.keymetrics.io/docs/tutorials/pm2-nginx-production-setup

pm2编程接口


如果想把pm2的进程监控,跟其他自动化流程整合起来,pm2的编程接口就很有用了。细节可参考官方文档:

http://pm2.keymetrics.io/docs/usage/pm2-api/

模块扩展系统


pm2支持第三方扩展,比如常用的log rotate等。可参考官方文档

二、安装

Linux Binaries下载地址:https://nodejs.org/dist

  1. cd oneinstack/src

  2. wget https://nodejs.org/dist/v4.2.4/node-v4.2.4-linux-x64.tar.gz

  3. tar xzf node-v4.2.4-linux-x64.tar.gz

  4. cp node-v4.2.4-linux-x64/bin/node /usr/local/bin/

  5. cp -R node-v4.2.4-linux-x64/lib/node_modules /usr/local/lib/

  6. ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm

  7. npm install pm2@latest -g #安装最新版本pm2模块

PS: 如果你的主机无法连接公网,先找到能连公网的主机安装上面的方法安装pm2,然后拷贝到你要安装的主机。拷贝如下目录:

  1. /usr/local/bin/node

  2. /usr/local/lib/node_modules

再创建相关软连接

三、PM2常用命令

假设你现在已经写好了一个app.js的文件,需要启动,你可以使用pm2进行管理

1. 启动

  1. # pm2 start app.js

  2. # pm2 start app.js --name my-api   #my-api为PM2进程名称

  3. # pm2 start app.js -i 0           #根据CPU核数启动进程个数

  4. # pm2 start app.js --watch   #实时监控app.js的方式启动,当app.js文件有变动时,pm2会自动reload

2. 查看进程

  1. # pm2 list

  2. # pm2 show 0 或者 # pm2 info 0  #查看进程详细信息,0为PM2进程id

3. 监控

  1. # pm2 monit

4. 停止

  1. # pm2 stop all  #停止PM2列表中所有的进程

  2. # pm2 stop 0    #停止PM2列表中进程为0的进程

5. 重载

  1. # pm2 reload all    #重载PM2列表中所有的进程

  2. # pm2 reload 0     #重载PM2列表中进程为0的进程

6. 重启

  1. # pm2 restart all     #重启PM2列表中所有的进程

  2. # pm2 restart 0      #重启PM2列表中进程为0的进程

7. 删除PM2进程

  1. # pm2 delete 0     #删除PM2列表中进程为0的进程

  2. # pm2 delete all   #删除PM2列表中所有的进程

8. 日志操作

  1. # pm2 logs [–raw]   #Display all processes logs in streaming

  2. # pm2 flush              #Empty all log file

  3. # pm2 reloadLogs    #Reload all logs

9. 升级PM2

  1. # npm install pm2@lastest -g   #安装最新的PM2版本

  2. # pm2 updatePM2                    #升级pm2

10. 更多命令参数请查看帮助

  1. # pm2 --help

四、PM2目录结构

默认的目录是:当前用于的家目录下的.pm2目录(此目录可以自定义,请参考:五、自定义启动文件),详细信息如下:

  1. $HOME/.pm2                   #will contain all PM2 related files

  2. $HOME/.pm2/logs           #will contain all applications logs

  3. $HOME/.pm2/pids           #will contain all applications pids

  4. $HOME/.pm2/pm2.log    #PM2 logs

  5. $HOME/.pm2/pm2.pid    #PM2 pid

  6. $HOME/.pm2/rpc.sock    #Socket file for remote commands

  7. $HOME/.pm2/pub.sock   #Socket file for publishable events

  8. $HOME/.pm2/conf.js       #PM2 Configuration

五、自定义启动文件

创建一个test.json的示例文件,格式如下:

  1. {

  2. “apps”:

  3. {

  4. “name”: “test”,

  5. “cwd”: “/data/wwwroot/nodejs”,

  6. “script”: “./test.sh”,

  7. “exec_interpreter”: “bash”,

  8. “min_uptime”: “60s”,

  9. “max_restarts”: 30,

  10. “exec_mode” : “cluster_mode”,

  11. “error_file” : “./test-err.log”,

  12. “out_file”: “./test-out.log”,

  13. “pid_file”: “./test.pid”

  14. “watch”: false

  15. }

  16. }

说明:

apps:json结构,apps是一个数组,每一个数组成员就是对应一个pm2中运行的应用

name:应用程序的名称

cwd:应用程序所在的目录

script:应用程序的脚本路径

exec_interpreter:应用程序的脚本类型,这里使用的shell,默认是nodejs

min_uptime:最小运行时间,这里设置的是60s即如果应用程序在60s内退出,pm2会认为程序异常退出,此时触发重启max_restarts设置数量

max_restarts:设置应用程序异常退出重启的次数,默认15次(从0开始计数)

exec_mode:应用程序启动模式,这里设置的是cluster_mode(集群),默认是fork

error_file:自定义应用程序的错误日志文件
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
在这里插入图片描述
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
易碰到天花板技术停滞不前!**

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-hVyykomy-1712182960303)]

[外链图片转存中…(img-RbsrvALD-1712182960303)]

[外链图片转存中…(img-x2I1W6I9-1712182960303)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
[外链图片转存中…(img-ip42fNtf-1712182960304)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值