>웹 프론트엔드 >JS 튜토리얼 >노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.

노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.

青灯夜游
青灯夜游앞으로
2023-04-19 18:59:121765검색

노드 프로세스 관리 도구-pm2를 사용하는 방법 이번 글에서는 노드 프로세스 관리 도구-pm2를 사용하는 방법에 대해 설명하겠습니다.

노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.

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.jspm2 start index2.js 分别启动这两个个程序

노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.

当然如果你想指定进程名字可以这样: pm2 start -n test index.js,如果你想监听文件改动可以加--watch等等

访问http://localhost:3000/

노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.

执行pm2 log可以看到我们打印的日志

노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.

pm2 的命令还有很多,下面列举几个

  • 停止 1 个/多个/所有程序 pm2 stop id/id1 id2 id3/all
  • 杀死 1 个/多个/所有程序 pm2 delete id/id1 id2 id3/all
  • 重启 1 个/多个/所有程序 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 个线程

노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.

当然如果你想指定多少线程可以直接将 max 改成你想开的线程数 pm2 start index -i 3

노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.

配置文件

上面的例子我们都是使用命令行进行管理的,这样其实挺不方便的,好在 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,同样的我们的两个服务都被启动了

노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.

下面列举一些配置项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 自带的日志功能是不支持日志分割的。随着时间的推移,日志文件会越来越大,不仅会影响性能,后期排查问题也十分麻烦,因此我们需要对日志进行分割。日志分割操作很简单,只需要安装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를 사용합니다. jspm2 start index2.js는 각각 이 두 프로그램을 시작합니다

노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.

물론, 프로세스 이름을 지정하려면 다음과 같이 하면 됩니다: pm2 start -n test index.js , 파일 변경 사항을 모니터링하려면 --watch 등을 추가하면 됩니다

🎜http://localhost:3000/를 방문하세요🎜🎜🎜🎜 실행 pm2 로그 확인 인쇄된 로그를 확인하세요🎜🎜노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다. 🎜🎜pm2에는 많은 명령이 있으며, 다음은 몇 가지입니다. 🎜
  • 1/다중/모든 프로그램 중지pm2 stop id/id1 id2 id3/all
  • 1/다중/모든 프로그램 종료pm2 delete id/id1 id2 id3/all
  • 1/다중/모든 프로그램 다시 시작 pm2 restart id/ id1 id2 id3/all
  • 로그 시작 및 보기pm2 start api.js --attach
  • 애플리케이션 나열 pm2 list
  • 모니터링 패널 보기 pm2 monit
  • 프로그램 데이터 보기 pm2 show [id]

로드 밸런싱🎜🎜우리는 NodeJS가 비동기식 단일 스레드 언어라는 것을 모두 알고 있습니다. 아무런 처리 없이 서버에 직접 배포되면 귀하에게만 적용됩니다. 서버의 스레드를 사용할 수 있는데 이는 엄청난 성능 낭비입니다. 🎜🎜pm2를 사용하면 프로그램이 서버의 CPU를 최대한 활용하게 하려면 명령 하나만 필요합니다. 예를 들어 pm2 start index -i max입니다. 10개의 코어와 20개의 스레드, 20개의 스레드가 열립니다🎜🎜image. png🎜🎜물론, 원하는 스레드 수를 지정하려면 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를 실행하세요. 마찬가지로 두 서비스가 시작됩니다🎜🎜노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.🎜🎜다음은 일부 구성 항목입니다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를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.

总结

pm2对于node服务的管理是十分方便的,文中提到的只是其中一部分,如果你想使用pm2管理你的服务的话可以到官网pm2.io/ 进行学习

更多node相关知识,请访问:nodejs 教程

위 내용은 노드 프로세스 관리 도구인 pm2를 사용하는 방법에 대해 자세히 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제