node
推荐阅读
目录
内容
1.pm2
- 功能:
- 进程守护
- 负载均衡
- 自动重启
- 命令行:
- --watch:监听应用目录的变化,一旦发生变化,自动重启。
- -i or --instance:启用多少个实例,可用于负载均衡,如果 -i 0 或者 -i max,则根据当前机器核数确定实例数目。
- --ignore-watch:排除监听的目录或文件,可以是特定的文件名,也可以是正则。
- -n or --name:应用的名称,查看应用信息的时候可以用到。
- -o or --output path:标准输出日志文件的路径。
- -e or --error path:错误输出日志文件的路径。
pm2 start app.js --watch -i max -n first_app
- 重启:
pm2 restart app.js
- 停止:
- 停止指定应用:
pm2 stop app_name | app_id
- 停止全部:
pm2 stop all
- 停止指定应用:
- 删除:
- 删除特定应用:
pm2 delete app_name | app_id
pm2 delete all
- 删除特定应用:
- 查看进程:
pm2 list
- 查看某个进程的信息:
pm2 descripe app_name | app_id
- 超过使用内存自动重启:
pm2 start app.js --max-memory-restart 100M
- 配置文件:
- 配置与运行:
- 1.配置
pm2.json
配置文件 - 2.
package.json
script中配置"pm2": "pm2 start pm2.json"
- 3.
npm run pm2
就可以运行了
- 1.配置
- 配置内容:
- 配置与运行:
{
"apps": {
"name": "express_project", // 项目名
"script": "app.js", // 执行文件
"cwd": "./", // 根目录
"args": "", // 传递给脚本的参数
"interpreter": "", // 指定的脚本解释器
"interpreter_args": "", // 传递给解释器的参数
"watch": true, // 是否监听文件变动然后重启
"ignore_watch": [ // 不用监听的文件
"node_modules",
"public"
],
"exec_mode": "cluster_mode", // 应用启动模式,支持 fork 和 cluster 模式
"instances": "max", // 应用启动实例个数,仅在 cluster 模式有效 默认为 fork
"error_file": "./logs/app-err.log", // 错误日志文件
"out_file": "./logs/app-out.log", // 正常日志文件
"merge_logs": true, // 设置追加日志而不是新建日志
"log_date_format": "YYYY-MM-DD HH:mm:ss", // 指定日志文件的时间格式
"min_uptime": "60s", // 应用运行少于时间被认为是异常启动
"max_restarts": 30, // 最大异常重启次数
"autorestart": true, // 默认为 true, 发生异常的情况下自动重启
"restart_delay": "60", // 异常重启情况下,延时重启时间
"env": {
"NODE_ENV": "production", // 环境参数,当前指定为生产环境
"REMOTE_ADDR": ""
},
"env_dev": {
"NODE_ENV": "development", // 环境参数,当前指定为开发环境
"REMOTE_ADDR": ""
},
"env_test": { // 环境参数,当前指定为测试环境
"NODE_ENV": "test",
"REMOTE_ADDR": ""
}
}
}
2.Cluster
-
前置知识:
- 进程:资源分配的最小单位,一个进程可以包括多个线程
- 线程:资源调度的最小单位,一个线程只能隶属于一个进程
- 单线程就是一个进程只开一个线程
- 多进程就是进程的复制
- node.js是基于单线程事件驱动的、异步非阻塞模式,可以用于高并发场景,避免了线程创建、线程之前上下文切换所产生的花销
- 父进程与子进程实际上是:master/worker的工作模式,利用主进程创建子进程,并分发任务给子进程
- 通常主进程用于处理同步任务,将异步任务分发给子进程处理