노드 프로세스 관리 도구-pm2를 사용하는 방법 이번 글에서는 노드 프로세스 관리 도구-pm2를 사용하는 방법에 대해 설명하겠습니다.
pm2는 애플리케이션을 보호하고 관리하는 데 도움이 되는 데몬 프로세스 관리 도구입니다. 일반적으로 pm2는 서비스가 온라인 상태가 될 때 관리에 사용됩니다. 실제로 pm2가 할 수 있는 일은 파일 변경 모니터링 및 자동 재시작, 여러 프로세스의 통합 관리, 로드 밸런싱 내장, 로깅 시스템 등 정말 많습니다. pm2
먼저 간단한 노드 서비스를 만들고 새 폴더를 만들고 npm init
를 실행한 다음 pm2npm init
,然后装 pm2
npm i pm2 -g
新建 index.js 和 index2.js,写两个简单的 http 服务,然后用 pm2 进行管理。【相关教程推荐:nodejs视频教程、编程教学】
//index.js let http = require("http"); let server = http.createServer(); server.on("request", function (req, res) { console.log("------------------enter"); res.write("hello juejin"); res.end(); }); server.listen(3000, function () { console.log(`服务器启动成功,通过http://localhost:3000/进行访问`); });
//index2.js let http = require("http"); let server = http.createServer(); server.on("request", function (req, res) { console.log("------------------enter2"); res.write("hello juejin2"); res.end(); }); server.listen(3001, function () { console.log(`服务器启动成功,通过http://localhost:3001/进行访问`); });
接下来我们将使用 pm2 的第一个命令: pm2 start index.js
和pm2 start index2.js
分别启动这两个个程序
当然如果你想指定进程名字可以这样: pm2 start -n test index.js
,如果你想监听文件改动可以加--watch
等等
访问http://localhost:3000/
执行pm2 log
可以看到我们打印的日志
pm2 的命令还有很多,下面列举几个
pm2 stop id/id1 id2 id3/all
pm2 delete id/id1 id2 id3/all
pm2 restart id/id1 id2 id3/all
pm2 start api.js --attach
pm2 list
pm2 monit
pm2 show [id]
我们都知道 NodeJS 是一个异步单线程语言,倘若不做任何处理直接部署到服务器上,那么它也只能使用服务器的一个线程,这样是非常浪费性能的。
使用 pm2 只需一个命令就能让我们的程序充分利用服务器的 CPU,拿 index.js 为例:pm2 start index -i max
,比如我的电脑是 10 核 20 线程,它就会开 20 个线程
当然如果你想指定多少线程可以直接将 max 改成你想开的线程数 pm2 start index -i 3
上面的例子我们都是使用命令行进行管理的,这样其实挺不方便的,好在 pm2 提供了配置文件的形式。
我们直接使用命令pm2 init simple
即可生成一个简单的配置文件ecosystem.config.js
,修改一下让它指向我们的两个服务
module.exports = { apps: [ { name: "index", script: "./index.js", }, { name: "index2", script: "./index2.js", }, ], };
然后我们将原先的进程都 kill 掉,执行pm2 start ecosystem.config.js
,同样的我们的两个服务都被启动了
下面列举一些配置项ecosystem.config.js
module.exports = { apps: [ { name: "index", //name script: "./index.js", //相对于pm2 start 的相对路径 cwd: "", //要启动的应用程序的目录 instances: 2, //要启动实例的数量,就是上面提到的负载 watch: true, //是否启动监听 env: { NODE_ENV: "development" }, // 将出现在您的应用程序中的 env 变量 env_xxx: { NODE_ENV: "xxx", //使用pm2注入xxx变量进行切换 }, log_date_format: "YYYY-MM-DD HH:mm Z", //日志时间格式 error_file: "./log/index-error.log", //错误文件路径 out_file: "./log/index-out.log", //输出日志文件路径 max_restarts: 10, //最大重启数 restart_delay: 4000, //重启延迟时间ms autorestart: true, //是否自动重启 cron_restart: "", //定时重启 使用cron表达式 }, { name: "index2", script: "./index2.js", }, ], };
日志对于后端排查错误是非常重要的,pm2 自带日志功能,比如我们在上面配置文件中配置了日志相关的参数
log_date_format: "YYYY-MM-DD HH:mm Z", //日志时间格式 error_file: "./log/index-error.log", //错误文件路径 out_file: "./log/index-out.log", //输出日志文件路径
当我们启动项目的时候,日志就会记录在 log 下
pm2 自带的日志功能是不支持日志分割的。随着时间的推移,日志文件会越来越大,不仅会影响性能,后期排查问题也十分麻烦,因此我们需要对日志进行分割。日志分割操作很简单,只需要安装pm2-logrotate
pm2 install pm2-logrotate를 설치합니다새 index.js와 index2.js를 만들고 두 가지 간단한 http 서비스를 작성합니다. 그런 다음 pm2를 사용하여 관리합니다. [권장 관련 튜토리얼: nodejs 동영상 튜토리얼, 프로그래밍 교육】
pm2 set pm2-logrotate:max_size 1K
pm2 restart ecosystem.config.js다음으로 pm2의 첫 번째 명령인
pm2 start index를 사용합니다. js
및 pm2 start index2.js
는 각각 이 두 프로그램을 시작합니다
물론, 프로세스 이름을 지정하려면 다음과 같이 하면 됩니다: pm2 start -n test index.js
, 파일 변경 사항을 모니터링하려면 --watch
등을 추가하면 됩니다
http://localhost:3000/
를 방문하세요🎜🎜🎜🎜 실행 pm2 로그 확인 인쇄된 로그를 확인하세요🎜🎜🎜🎜pm2에는 많은 명령이 있으며, 다음은 몇 가지입니다. 🎜pm2 stop id/id1 id2 id3/all
pm2 delete id/id1 id2 id3/all
pm2 restart id/ id1 id2 id3/all
pm2 start api.js --attach
pm2 list
pm2 monit
pm2 show [id]
pm2 start index -i max
입니다. 10개의 코어와 20개의 스레드, 20개의 스레드가 열립니다🎜🎜🎜🎜물론, 원하는 스레드 수를 지정하려면 max를 열고 싶은 스레드 수로 직접 변경할 수 있습니다. pm2 start index -i 3 코드>🎜🎜<img src="https://img.php.cn/upload/article/000/000/024/b209adeeafb2038bf428c9dc446f3294-4.png" alt="노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다." loading="lazy">🎜 <h2 data-id="heading-3">구성 파일🎜🎜위의 예에서는 모두 명령줄을 사용하여 관리했는데, 이는 실제로 상당히 불편합니다. 다행히 pm2는 구성 파일 형식을 제공합니다. 🎜🎜<code>pm2 init simple
명령을 직접 사용하여 간단한 구성 파일 ecosystem.config.js
를 생성하고 두 서비스를 가리키도록 수정합니다🎜rrreee🎜 그런 다음 종료합니다. 모든 원래 프로세스를 완료하고 pm2 start Ecosystem.config.js
를 실행하세요. 마찬가지로 두 서비스가 시작됩니다🎜🎜🎜🎜다음은 일부 구성 항목입니다ecosystem.config.js🎜rrreee<h2 data- id="heading-4">Log🎜🎜Log는 백엔드 문제 해결에 매우 중요합니다. pm2에는 자체 로그 기능이 있습니다. 예를 들어 위의 구성 파일에서 로그 관련 매개 변수를 구성했습니다. 프로젝트를 시작하면 로그가 로그에 기록됩니다 🎜🎜<img src="https://img.php.cn/upload/article/000/000/024/88f246791c471dd2858c0759129cd5c4-6.png" alt="image. png" loading="lazy">🎜🎜pm2 자체 로그 기능은 로그 분할을 지원하지 않습니다. 시간이 지남에 따라 로그 파일이 점점 더 커지게 되어 성능에 영향을 미칠 뿐만 아니라 나중에 문제를 해결하는 데에도 매우 번거롭기 때문에 로그를 분할해야 합니다. 로그 분할 작업은 매우 간단합니다. <code>pm2-logrotate
플러그인만 설치하면 됩니다. pm2 install🎜rrreee🎜 그런 다음 관련 구성을 보려면 pm2 conf를 실행하세요🎜🎜🎜 🎜🎜해당 의미를 설명해주세요🎜Compress:是否通过 gzip 压缩日志
max_size:单个日志文件的大小
retain:保留的日志文件个数
dateFormat:日志文件名中的日期格式,默认是 YYYY-MM-DD_HH-mm-ss
rotateModule:是否把 pm2 本身的日志也进行分割,
workerInterval:检查文件时间间隔
rotateInterval:设置强制分割,默认值是 0 0 * * *,意思是每天晚上 0 点分割,这里使用的是 corn 表达式,不会的可以搜索一下
如果我们想要配置也很简单,比如修改 max_size
pm2 set pm2-logrotate:max_size 1K
然后我们简单测试一下这个工具,我们先设置每个 log 文件最大 1kb
然后重启我们的项目
pm2 restart ecosystem.config.js
然后就会发现我们的日志被分割了
pm2对于node服务的管理是十分方便的,文中提到的只是其中一部分,如果你想使用pm2管理你的服务的话可以到官网pm2.io/ 进行学习
更多node相关知识,请访问:nodejs 教程!
위 내용은 노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!