思考
1.如何上线Node编写的程序?
上线项目需要考虑的几个问题
1.1 服务稳定性,不会因为程序的某个错误或者异常导致项目停止服务
1.2 线上日志记录,除了记录访问日志外,我们还要记录错误日志和自定义日志
1.3 充分利用服务器资源,Node是单线程的,服务器是多核的,一台服务器只运行一个Node程序太浪费资源
2.如何解决上述问题?
通过PM2
2.1 PM2的进程守护可以在程序崩溃后自动重启
2.2 PM2自带的日志记录功能,可以很方便的记录错误的日志和自定义日志
2.3 PM2可以启动多个Node进程,充分利用服务器资源
3.PM2的使用
npm i pm2 -g
pm2 --version
//app.js 是入口文件
pm2 start app.js
4.常用指令和配置
1.常用命令
pm2 start app.js|config //启动应用程序
pm2 list //列出启动的所有应用程序
pm2 restart appName|appId //重启应用程序
pm2 info appName|appId //查看应用程序详细信息
pm2 log appName|appId //显示指定应用程序的日志
pm2 monit appName|appId //监控应用程序
pm2 stop appName|appId //停止程序
pm2 delete appName|appId //关闭并删除应用程序
2. pm2的常用配置
//pm2.config.json
{
"app":{
"name":"mynode",
"script":"app.js",
"watch":"true", //是否需要自动重启和更新
"ignore_watch":[ //下列文件变化不需要监听
"node_modules",
"logs"
],
"error_file":"logs/错误日志文件名",
"out_file":"logs/自定义日志文件名",
"log_date_format":"YYYY-MM-DD HH:mm:ss"
}
}
3.负载均衡
在配置文件中增减instance配置,想启动几个进程就写几个(不要超过cpu的核数) 日志文件分数会有对应启动的个数。
//pm2.config.json
{
"app":{
"name":"mynode",
"script":"app.js",
"watch":"true", //是否需要自动重启和更新
"ignore_watch":[ //下列文件变化不需要监听
"node_modules",
"logs"
],
"error_file":"logs/错误日志文件名",
"out_file":"logs/自定义日志文件名",
"log_date_format":"YYYY-MM-DD HH:mm:ss",
"instance":"4" //负载的个数
}
}