-
pm2的核心价值。
- 进程守护:进程奔溃了,会自动重启,接口还能继续访问
- 日志记录:console.log 会自动收集到out.log文件中;console.error会自动收集到err.log文件中
- 多进程启动:pm2可以配置多进程,使内存和多核cpu得到充分使用
-
pm2 和 nodemon的区别
- pm2是线上发布的工具,是后台运行,控制台的命令行还可以继续使用
- nodemon是本地开发的工具,前台运行,控制台的命令不能继续使用
- pm2有进程守护,进程奔溃了,会自动重启,接口还能继续访问;nodemon没有进程守护
-
pm2进程守护
有无进程守护的区别:
- node app.js 和 nodemon app.js , 进程崩溃则不能继续访问
- pm2遇到进程崩溃,会自动重启 (使用 pm2 list [id] 通过查看 restart 的次数来观察重启的次数)
-
pm2常用配置
pm2.config.json中的文件如果改动了,用restart命令重启pm2,是不生效的。需要进行以下操作:
- pm2 stop 0 关掉进程
- pm2 delete 0 删除进程
- npm run prd 重新读pm2.config.json,开启一个新的进程
// pm2.config.json 文件 // "watch": true, -- 更改了非ignore_watch里的文件后,会自动重启 { "name": "pm2-test-server", "script": "app.js", "watch": true, "ignore_watch": ["node_modules", "logs"], "error_file": "logs/err.log", "out_file": "logs/out.log", "log_date_format": "YYYY-MM-DD HH:mm:ss" } // package.json中 "scripts": { "dev": "cross-env NODE_ENV=dev nodemon app.js", "prd": "cross-env NODE_ENV=production pm2 start pm2.config.json" }, -
pm2多进程
-
为何要用多进程?
背景:操作系统会限制一个进程的最大使用内存。
内存角度:如果只有一个内存的话,无法充分利用机器的全部内存。
cpu角度:无法充分利用多核cpu的优势。比如 4核cpu,最多可以处理4个进程。
-
多进程和redis
-
配置多进程方法:在配置中加一项 instances属性
// pm2.config.json { "name": "pm2-test-server", "script": "app.js", "watch": false, "ignore_watch": ["node_modules", "logs"], "instances": 4, "error_file": "logs/err.log", "out_file": "logs/out.log", "log_date_format": "YYYY-MM-DD HH:mm:ss" } // pm2 会根据哪个进程空闲了,就把请求派发到哪个进程中去 -