CLOVER๐Ÿ€

That was when it all began.

PM2ใ‚’ไฝฟใฃใฆใ€Node.jsใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚’ใ‚ฏใƒฉใ‚นใ‚ฟใƒผๅŒ–๏ผˆCPUใ‚นใ‚ฑใƒผใƒชใƒณใ‚ฐ๏ผ‰ใ•ใ›ใฆใฟใ‚‹

ใ“ใ‚Œใฏใ€ใชใซใ‚’ใ—ใŸใใฆๆ›ธใ„ใŸใ‚‚ใฎ๏ผŸ

Node.jsใงๅ‹•ไฝœใ™ใ‚‹ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฏใ€ๅ˜ไธ€ใƒ—ใƒญใ‚ปใ‚นใ€ๅ˜ไธ€ใ‚นใƒฌใƒƒใƒ‰ใงๅ‹•ไฝœใ™ใ‚‹ใฎใงใƒ›ใ‚นใƒˆๅดใซ่ค‡ๆ•ฐใฎCPUใŒ
ใ‚ใฃใŸใจใ—ใฆใ‚‚ใ€ใใฎใพใพใงใฏCPUใ‚’ๆœ‰ๅŠนใซๆดป็”จใงใใพใ›ใ‚“ใ€‚

PM2ใชใฉใฎใƒ—ใƒญใ‚ปใ‚นใƒžใƒใƒผใ‚ธใƒฃใƒผใ‚’ไฝฟใ†ใจใ€ใ“ใฎใ‚ใŸใ‚Šใ‚’ๆฅฝใซใงใใ‚‹ใ‚ˆใ†ใชใฎใงใ€่ฉฆใ—ใฆใฟใ‚‹ใ“ใจใซใ—ใพใ—ใŸใ€‚

Node.jsใจใƒžใƒซใƒใ‚ณใ‚ขCPU

Node.jsใงๅ‹•ไฝœใ™ใ‚‹ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฏใ€ๅ˜ไธ€ใƒ—ใƒญใ‚ปใ‚นใ€ๅ˜ไธ€ใ‚นใƒฌใƒƒใƒ‰ใงๅ‹•ไฝœใ—ใพใ™ใ€‚

ใใฎใพใพใ ใจCPUใŒ่ค‡ๆ•ฐใ‚ใฃใฆใ‚‚ๅˆฉ็”จใงใใชใ„ใฎใงใ™ใŒใ€clusterใƒขใ‚ธใƒฅใƒผใƒซใ‚’ๅˆฉ็”จใ™ใ‚‹ใจNode.jsใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใงใ‚‚
ใƒžใƒซใƒใƒ—ใƒญใ‚ปใ‚นใ‚’ๆ‰ฑใˆใ‚‹ใ‚ˆใ†ใซใชใ‚Šใ€ใƒžใƒซใƒใ‚ณใ‚ขCPUใ‚’ๆดป็”จใงใใ‚‹ใ‚ˆใ†ใซใชใ‚Šใพใ™ใ€‚

A single instance of Node.js runs in a single thread. To take advantage of multi-core systems, the user will sometimes want to launch a cluster of Node.js processes to handle the load.

Cluster | Node.js v16.13.1 Documentation

clusterใƒขใ‚ธใƒฅใƒผใƒซใงไฝœๆˆใ—ใŸๅญใƒ—ใƒญใ‚ปใ‚นใฏใ€ใ‚ตใƒผใƒใƒผใƒใƒผใƒˆใ‚’ๅ…ฑๆœ‰ใงใใ‚‹ใฎใงใ‚ตใƒผใƒใƒผใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใงไพฟๅˆฉใงใ™ใ€‚

The cluster module allows easy creation of child processes that all share server ports.

ใพใŸใ€Node.js 10.5.0ไปฅ้™ใงใ‚ใ‚Œใฐใ€worker_threadsใƒขใ‚ธใƒฅใƒผใƒซใŒไฝฟใˆใ‚‹ใฎใงใ€ใƒžใƒซใƒใ‚นใƒฌใƒƒใƒ‰ใ‚‚ๅˆฉ็”จใงใใ‚‹ใ‚ˆใ†ใซ
ใชใ‚Šใพใ™ใ€‚

Worker threads | Node.js v16.13.1 Documentation

ใ“ใกใ‚‰ใฏใ€I/OใงใฏใชใCPUใƒใ‚ฆใƒณใƒ‰ใชๅ‡ฆ็†ใซๅŠนๆžœ็š„ใชใ‚ˆใ†ใงใ™๏ผˆI/Oใƒกใ‚คใƒณใฎๅ ดๅˆใฏใ€Node.jsใฎ้žๅŒๆœŸๅ‡ฆ็†ใฎๆ–นใŒ
ๅŠน็Ž‡็š„ใ ใจใ•ใ‚Œใฆใ„ใ‚‹ใŸใ‚๏ผ‰ใ€‚

ใƒ—ใƒญใ‚ปใ‚นใƒžใƒใƒผใ‚ธใƒฃใƒผ

ไปŠๅ›žใฏใ€clusterใƒขใ‚ธใƒฅใƒผใƒซใงใฏใชใ๏ผˆworker_threadsใƒขใ‚ธใƒฅใƒผใƒซใงใ‚‚ใชใ๏ผ‰ใ€ใƒžใƒซใƒใƒ—ใƒญใ‚ปใ‚นใ‚’็ฐกๅ˜ใซๆ‰ฑใˆใ‚‹
ใƒ„ใƒผใƒซใŒๅญ˜ๅœจใ—ใพใ™ใ€‚

Expressใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใงใฏใ€StrongLoop PMใจPM2ใŒ็ดนไป‹ใ•ใ‚Œใฆใ„ใพใ™ใ€‚

Production best practices: performance and reliability / Run your app in a cluster

ใฉใกใ‚‰ใ‚‚ใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚ณใƒผใƒ‰ใ‚’ไฟฎๆญฃใ›ใšใซใ‚ฏใƒฉใ‚นใ‚ฟใƒชใƒณใ‚ฐ๏ผˆใƒžใƒซใƒใƒ—ใƒญใ‚ปใ‚น๏ผ‰ใ‚’ๅˆฉ็”จใงใใพใ™ใ€‚

If you deploy your application to StrongLoop Process Manager (PM), then you can take advantage of clustering without modifying your application code.

If you deploy your application with PM2, then you can take advantage of clustering without modifying your application code.

ใ“ใฎไป–ใ€ใƒ—ใƒญใ‚ปใ‚น็ฎก็†ใจใ„ใ†็‚นใงใฏForeverใ‚‚็ดนไป‹ใ•ใ‚Œใฆใ„ใพใ™ใ€‚

Foreverใฏใ€PM2ใ‚„nodemonใ‚’ไฝฟ็”จใ™ใ‚‹ใ“ใจใ‚’ๅ‹งใ‚ใฆใ„ใพใ™ใŒใ€‚

ใ“ใ‚Œใ‚‰ใฎใƒ„ใƒผใƒซใซๅฏพใ™ใ‚‹ๆฏ”่ผƒใฏใ€StrongLoop PMใŒ่กŒใฃใฆใ„ใพใ™ใ€‚

StrongLoop Process Manager

StrongLoop PMใฎ่ณ‡ๆ–™ใชใฎใงใ€ๆ‰ใˆๆ–นใซใฏๆณจๆ„ใŒ่ฆใ‚‹ๆฐ—ใฏใ—ใพใ™ใŒใ€‚
ใ–ใฃใจStrongLoop PMใจPM2ใ‚’่ฆ‹ๆฏ”ในใ‚‹ใจStrongLoop PMใฎๆ–นใŒใงใใ‚‹ใ“ใจใŒๅคšใใ€ไปฅไธ‹ใŒ็›ฎ็ซ‹ใฃใŸๅทฎใชใ‚ˆใ†ใซ
ๆ€ใ„ใพใ™ใ€‚

  • ใƒ‡ใƒ—ใƒญใ‚คๆ™‚ใฎHTTPใฎใ‚ตใƒใƒผใƒˆ
  • ใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใƒณใ‚ฐใ€Dockerใธใฎใƒ‡ใƒ—ใƒญใ‚คใฎใ‚ตใƒใƒผใƒˆ
  • ๅฎŸ่กŒไธญใฎใ‚ฏใƒฉใ‚นใ‚ฟใƒผใฎใ‚ตใ‚คใ‚บๅค‰ๆ›ด๏ผˆโ€ป๏ผ‰
  • ใƒญใƒผใƒ‰ใƒใƒฉใƒณใ‚ตใƒผใฎ่‡ชๅ‹•ๆง‹ๆˆ๏ผˆโ€ป๏ผ‰
  • ใƒ—ใƒญใƒ•ใ‚กใ‚คใƒชใƒณใ‚ฐใฎใ‚ตใƒใƒผใƒˆ

โ€ป โ€ฆ ไปŠๅ›žๆ›ธใ„ใŸ็ฏ„ๅ›ฒใง่ฆ‹ใฆใ„ใ‚‹ใจใ€ใ“ใฎใ‚ใŸใ‚ŠใฏPM2ใงใ‚‚ใงใใใ†ใงใ™ใŒโ€ฆ๏ผŸ

PM2ใฏNode.jsใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณไปฅๅค–ใฎใ‚‚ใฎใ‚‚ใƒ—ใƒญใ‚ปใ‚น็ฎก็†ใงใใ‚‹ใ‚ˆใ†ใงใ™ใ€‚

ไปŠๅ›žใฏใ€PM2ใ‚’ไฝฟใฃใฆใฟใŸใ„ใจๆ€ใ„ใพใ™ใ€‚

PM2

PM2ใฏใ€daemonใƒ—ใƒญใ‚ปใ‚นใ‚’็ฎก็†ใ™ใ‚‹ใƒ„ใƒผใƒซใงใ™ใ€‚

PM2 - Home

ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚’่ฆ‹ใฆใ‚‚ใ‚ใพใ‚ŠใพใจใพใฃใŸ่ชฌๆ˜ŽใŒใชใ„ใฎใงใ™ใŒใ€ใƒˆใƒƒใƒ—ใƒšใƒผใ‚ธใซใ‚ใ‚‹ๆฉŸ่ƒฝใ‚’่ฆ‹ใ‚‹ใจใ“ใ‚“ใชๆ„Ÿใ˜ใฟใŸใ„ใงใ™ใ€‚

f:id:Kazuhira:20220101233404p:plain

Quick Startใ‚’่ฆ‹ใ‚‹ใจใ€ใŠใ‚ˆใใฎๆฉŸ่ƒฝใฎ้›ฐๅ›ฒๆฐ—ใ‚’ใ–ใฃใใ‚ŠๆŽดใ‚€ใ“ใจใŒใงใใพใ™ใ€‚

PM2 - Quick Start

ไปŠๅ›žใฏใ€ใ“ใ‚Œใ‚‰ใฎๆฉŸ่ƒฝใฎไธญใฎCluster Modeใซ็€็›ฎใ—ใพใ™ใ€‚

PM2 - Cluster Mode

Cluster Modeใ‚’ไฝฟใ†ใจใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚ณใƒผใƒ‰ใฎๅค‰ๆ›ดใชใ—ใซใ€ใ‚ตใƒผใƒใƒผใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณ๏ผˆHTTPใ€HTTPSใ€TCPใ€UDP๏ผ‰ใ‚’
CPUใ‚นใ‚ฑใƒผใƒชใƒณใ‚ฐใ•ใ›ใ‚‹ใ“ใจใŒใงใใ‚‹ใ€ใจใ—ใฆใ„ใพใ™ใ€‚

ๅ†…้ƒจ็š„ใซใฏNode.jsใฎclusterใƒขใ‚ธใƒฅใƒผใƒซใ‚’ไฝฟ็”จใ—ใฆใ„ใ‚‹ใ‚ˆใ†ใงใ€ๅญใƒ—ใƒญใ‚ปใ‚นใฏใ‚ตใƒผใƒใƒผใƒใƒผใƒˆใฎๅ…ฑๆœ‰ใŒๅฏ่ƒฝใชใ“ใจใ‚‚
ๅŒใ˜ใ ใจใ‹ใ€‚

่ชฌๆ˜Žใฏใ“ใฎใใ‚‰ใ„ใซใ—ใฆใ€ๅฎŸ้š›ใซไฝฟใฃใฆใฟใพใ—ใ‚‡ใ†ใ€‚

็’ฐๅขƒ

ไปŠๅ›žใฎ็’ฐๅขƒใฏใ€ใ“ใกใ‚‰ใ€‚

$ node --version
v16.13.1


$ npm --version
8.1.2

ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝœๆˆใ™ใ‚‹

็ขบ่ช็”จใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝœๆˆใ—ใพใ—ใ‚‡ใ†ใ€‚

$ npm init -y
$ npm i -D typescript
$ npm i -D -E prettier
$ mkdir src

ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฏใ€Expressใงไฝœๆˆใ™ใ‚‹ใ“ใจใซใ—ใพใ™ใ€‚

$ npm i express
$ npm i -D @types/node@v16 @types/express

ใ“ใฎๆ™‚็‚นใงใฎไพๅญ˜้–ขไฟ‚ใ€‚

  "devDependencies": {
    "@types/express": "^4.17.13",
    "@types/node": "^16.11.17",
    "prettier": "2.5.1",
    "typescript": "^4.5.4"
  },
  "dependencies": {
    "express": "^4.17.2"
  }

ๅ„็จฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ€‚

tsconfig.json

{
  "compilerOptions": {
    "target": "esnext",
    "module": "commonjs",
    "baseUrl": "./src",
    "outDir": "dist",
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "noImplicitOverride": true,
    "noImplicitReturns": true,
    "noPropertyAccessFromIndexSignature": true,
    "esModuleInterop": true
  },
  "include": [
    "src"
  ]
}

.prettierrc.json

{
  "singleQuote": true
}

ใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใฏใ€ใ“ใ‚“ใชๆ„Ÿใ˜ใซใ—ใพใ—ใŸใ€‚Expressใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใงใ€ใƒ•ใ‚ฃใƒœใƒŠใƒƒใƒๆ•ฐใ‚’่จˆ็ฎ—ใ—ใฆ่ฟ”ใ™ใ‚‚ใฎใงใ™ใ€‚

src/app.ts

import express from 'express';

const app = express();

const address = '0.0.0.0';
const port = 3000;

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

function fib(n: number): number {
  if (n === 0) {
    return 0;
  } else if (n === 1) {
    return 1;
  }

  return fib(n - 1) + fib(n - 2);
}

app.get('/fib', (req, res) => {
  const num = req.query['num'] ? parseInt(req.query['num'] as string, 10) : 0;

  const result = fib(num);

  return res.json({
    num: num,
    result: result,
    pid: process.pid,
  });
});

app.listen(port, address, () => {
  console.log(
    `[${new Date().toISOString()}] server[${address}:${port}] startup.`
  );
});

ๅฐ‘ใ—ๅคงใใ‚ใฎๆ•ฐใ‚’ไธŽใˆใฆใ€CPUใ‚’ๅฐ‚ๆœ‰ใ•ใ›ใ‚‹ใ“ใจใŒใ“ใฎๅ‡ฆ็†ใฎ็›ฎ็š„ใงใ™ใ€‚

ๅ‹•ไฝœ็ขบ่ชใ—ใพใ—ใ‚‡ใ†ใ€‚

ใƒ“ใƒซใƒ‰ใ—ใฆ

$ npx tsc --project .

่ตทๅ‹•ใ€‚

$ node dist/app.js
[2022-01-01T18:01:19.391Z] server[0.0.0.0:3000] startup.

44ใใ‚‰ใ„ใŒๆ™‚้–“็š„ใซใกใ‚‡ใ†ใฉ่‰ฏใ•ใใ†ใงใ—ใŸใ€‚10็ง’ใปใฉใ‹ใ‹ใ‚Šใพใ™ใ€‚

$ time curl localhost:3000/fib?num=44
{"num":44,"result":701408733,"pid":62052}
real    0m10.250s
user    0m0.015s
sys     0m0.000s

ไธŽใˆใŸๆ•ฐๅญ—ใ€่จˆ็ฎ—็ตๆžœใ€ใใ—ใฆๅ‡ฆ็†ใ‚’่กŒใฃใŸใƒ—ใƒญใ‚ปใ‚นใฎPIDใŒ่ฟ”ใฃใฆใใพใ™ใ€‚

ใ“ใฎๆ™‚ใฎCPUไฝฟ็”จ็Ž‡ใ‚’่ฆ‹ใฆใฟใพใ™ใ€‚

$ mpstat -P ALL 1

ใ“ใฎ็’ฐๅขƒใงใฏCPUใŒ8ใคใ‚ใ‚‹ใฎใงใ™ใŒใ€ใฒใจใคๅฎŒๅ…จใซไฝฟใ„ๅˆ‡ใฃใฆใ„ใพใ™ใ€‚

03ๆ™‚02ๅˆ†24็ง’  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03ๆ™‚02ๅˆ†25็ง’  all   15.89    0.00    1.34    0.12    0.00    2.57    0.00    0.00    0.00   80.07
03ๆ™‚02ๅˆ†25็ง’    0    2.70    0.00    1.80    0.00    0.00   10.81    0.00    0.00    0.00   84.68
03ๆ™‚02ๅˆ†25็ง’    1    3.77    0.00    0.94    0.94    0.00    6.60    0.00    0.00    0.00   87.74
03ๆ™‚02ๅˆ†25็ง’    2  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03ๆ™‚02ๅˆ†25็ง’    3    4.04    0.00    1.01    0.00    0.00    0.00    0.00    0.00    0.00   94.95
03ๆ™‚02ๅˆ†25็ง’    4    6.86    0.00    1.96    0.00    0.00    0.98    0.00    0.00    0.00   90.20
03ๆ™‚02ๅˆ†25็ง’    5    3.03    0.00    0.00    0.00    0.00    1.01    0.00    0.00    0.00   95.96
03ๆ™‚02ๅˆ†25็ง’    6    5.88    0.00    3.92    0.00    0.00    0.00    0.00    0.00    0.00   90.20
03ๆ™‚02ๅˆ†25็ง’    7    3.03    0.00    1.01    0.00    0.00    0.00    0.00    0.00    0.00   95.96

03ๆ™‚02ๅˆ†25็ง’  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03ๆ™‚02ๅˆ†26็ง’  all   15.11    0.00    1.57    0.00    0.00    2.90    0.00    0.00    0.00   80.41
03ๆ™‚02ๅˆ†26็ง’    0    2.54    0.00    0.85    0.00    0.00   16.10    0.00    0.00    0.00   80.51
03ๆ™‚02ๅˆ†26็ง’    1    1.92    0.00    1.92    0.00    0.00    3.85    0.00    0.00    0.00   92.31
03ๆ™‚02ๅˆ†26็ง’    2  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03ๆ™‚02ๅˆ†26็ง’    3    3.92    0.00    1.96    0.00    0.00    0.00    0.00    0.00    0.00   94.12
03ๆ™‚02ๅˆ†26็ง’    4    3.06    0.00    1.02    0.00    0.00    0.00    0.00    0.00    0.00   95.92
03ๆ™‚02ๅˆ†26็ง’    5    3.92    0.00    1.96    0.00    0.00    0.00    0.00    0.00    0.00   94.12
03ๆ™‚02ๅˆ†26็ง’    6    4.90    0.00    2.94    0.00    0.00    0.98    0.00    0.00    0.00   91.18
03ๆ™‚02ๅˆ†26็ง’    7    3.96    0.00    1.98    0.00    0.00    0.00    0.00    0.00    0.00   94.06

ๆฌกใซใ€ใ‚ฟใƒผใƒŸใƒŠใƒซใ‚’2ใค้–‹ใใ€curlใงใƒชใ‚ฏใ‚จใ‚นใƒˆใ‚’2ใค้€ใฃใฆใฟใพใ™ใ€‚

$ time curl localhost:3000/fib?num=44
{"num":44,"result":701408733,"pid":62052}
real    0m10.408s
user    0m0.000s
sys     0m0.008s


$ time curl localhost:3000/fib?num=44
{"num":44,"result":701408733,"pid":62052}
real    0m20.344s
user    0m0.004s
sys     0m0.005s

2ใค็›ฎใฎใƒชใ‚ฏใ‚จใ‚นใƒˆใฏใ€ๅ‡ฆ็†ๆ™‚้–“ใŒใปใผ2ๅ€ใซใชใ‚Šใพใ—ใŸใ€‚

CPUไฝฟ็”จ็Ž‡ใฏใ€ใฒใจใคใฎCPUใ‚’ไฝฟใ„ๅˆ‡ใฃใŸใพใพๅค‰ใ‚ใ‚Šใพใ›ใ‚“ใ€‚

03ๆ™‚04ๅˆ†24็ง’  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03ๆ™‚04ๅˆ†25็ง’  all   17.73    0.00    1.57    3.26    0.00    2.90    0.00    0.00    0.00   74.55
03ๆ™‚04ๅˆ†25็ง’    0    5.26    0.00    0.88    0.00    0.00   12.28    0.00    0.00    0.00   81.58
03ๆ™‚04ๅˆ†25็ง’    1    9.35    0.00    0.93   22.43    0.00    6.54    0.00    0.00    0.00   60.75
03ๆ™‚04ๅˆ†25็ง’    2    7.92    0.00    3.96    0.00    0.00    0.00    0.00    0.00    0.00   88.12
03ๆ™‚04ๅˆ†25็ง’    3    2.97    0.00    2.97    2.97    0.00    0.00    0.00    0.00    0.00   91.09
03ๆ™‚04ๅˆ†25็ง’    4    8.74    0.00    1.94    0.00    0.00    1.94    0.00    0.00    0.00   87.38
03ๆ™‚04ๅˆ†25็ง’    5    5.88    0.00    0.98    0.00    0.00    0.98    0.00    0.00    0.00   92.16
03ๆ™‚04ๅˆ†25็ง’    6  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03ๆ™‚04ๅˆ†25็ง’    7    4.95    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   94.06

03ๆ™‚04ๅˆ†25็ง’  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03ๆ™‚04ๅˆ†26็ง’  all   24.76    0.00    0.85    0.00    0.00    3.38    0.00    0.00    0.00   71.01
03ๆ™‚04ๅˆ†26็ง’    0   11.57    0.00    0.83    0.00    0.00   18.18    0.00    0.00    0.00   69.42
03ๆ™‚04ๅˆ†26็ง’    1   14.15    0.00    0.94    0.00    0.00    5.66    0.00    0.00    0.00   79.25
03ๆ™‚04ๅˆ†26็ง’    2   17.82    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   82.18
03ๆ™‚04ๅˆ†26็ง’    3   13.86    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   85.15
03ๆ™‚04ๅˆ†26็ง’    4   13.86    0.00    1.98    0.00    0.00    0.00    0.00    0.00    0.00   84.16
03ๆ™‚04ๅˆ†26็ง’    5   14.14    0.00    1.01    0.00    0.00    0.00    0.00    0.00    0.00   84.85
03ๆ™‚04ๅˆ†26็ง’    6  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03ๆ™‚04ๅˆ†26็ง’    7   16.16    0.00    1.01    0.00    0.00    0.00    0.00    0.00    0.00   82.83

ใคใพใ‚Šใ€ใฒใจใคใ—ใ‹CPUใ‚’ไฝฟใˆใชใ„ใฎใงใ€2ใค็›ฎใฎใƒชใ‚ฏใ‚จใ‚นใƒˆใŒๅฎŒๅ…จใซๅพ…ใฃใฆใ„ใ‚‹็Šถๆ…‹ใซใชใฃใฆใ„ใพใ™ใ€‚

PM2ใ‚’ใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใฆใ€ใƒžใƒซใƒใƒ—ใƒญใ‚ปใ‚นๅŒ–ใ—ใฆใฟใ‚‹

ใงใฏใ€ใ“ใ“ใ‹ใ‚‰ใฏPM2ใ‚’ไฝฟใฃใฆclusterๅŒ–ใ—ใฆใฟใพใ—ใ‚‡ใ†ใ€‚

ใพใšใฏใ‚คใƒณใ‚นใƒˆใƒผใƒซใ‹ใ‚‰ใ€‚

PM2 - Quick Start

ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใฏnpm install -gใงใ‚ฐใƒญใƒผใƒใƒซใซใ‚คใƒณใ‚นใƒˆใƒผใƒซใ—ใ‚ˆใ†ใจใ™ใ‚‹ใฎใงใ™ใŒใ€ไปŠๅ›žใฏใƒญใƒผใ‚ซใƒซใ‚คใƒณใ‚นใƒˆใƒผใƒซใจ
ใ—ใพใ—ใŸใ€‚

$ npm i -D pm2

devDependenciesใ‹dependenciesใ‹ใฏๆ‚ฉใฟใพใ—ใŸใŒใ€ไปŠๅ›žใฏdevDependenciesใซใ—ใพใ—ใŸโ€ฆใ€‚

ไพๅญ˜้–ขไฟ‚ใฏใ€ใ“ใฎใ‚ˆใ†ใซใชใ‚Šใพใ—ใŸใ€‚

  "devDependencies": {
    "@types/express": "^4.17.13",
    "@types/node": "^16.11.17",
    "pm2": "^5.1.2",
    "prettier": "2.5.1",
    "typescript": "^4.5.4"
  },
  "dependencies": {
    "express": "^4.17.2"
  }

ใƒใƒผใ‚ธใƒงใƒณ็ขบ่ชใ€‚

$ npx pm2 --version

ใƒใƒŠใƒผใชใฉใŒ่กจ็คบใ•ใ‚Œใพใ™ใŒใ€ใ“ใกใ‚‰ใ‚‚5.1.2ใงใ™ใ€‚

5.1.2

PM2ใฏใ€ใ‚ณใƒžใƒณใƒ‰ใ‚’ๆŒ‡ๅฎšใ—ใฆไฝฟใ†ใ‚ˆใ†ใชใฎใงใ™ใŒใ€ใ‚ณใƒžใƒณใƒ‰ใ”ใจใฎใƒ˜ใƒซใƒ—ใ‚’่ฆ‹ใฆใ‚‚ใ‚ใพใ‚Šๆƒ…ๅ ฑใŒใ‚ใ‚Šใพใ›ใ‚“ใ€‚

$ npx pm2 start --help

  Usage: start [options] [name|namespace|file|ecosystem|id...]

  start and daemonize an app

  Options:

    --watch                 Watch folder for changes
    --fresh                 Rebuild Dockerfile
    --daemon                Run container in Daemon mode (debug purposes)
    --container             Start application in container mode
    --dist                  with --container; change local Dockerfile to containerize all files in current directory
    --image-name [name]     with --dist; set the exported image name
    --node-version [major]  with --container, set a specific major Node.js version
    --dockerdaemon          for debugging purpose
    -h, --help              output usage information

ใ‚ชใƒ—ใ‚ทใƒงใƒณๅ…จไฝ“ใ‚’่ฆ‹ใŸใ„ๅ ดๅˆใฏใ€pm2 --helpใง่ฆ‹ใ‚‹ใฎใŒ่‰ฏใ•ใใ†ใงใ™ใ€‚

$ npx pm2 --help

  Usage: pm2 [cmd] app

  Options:

    -V, --version                                                output the version number
    -v --version                                                 print pm2 version
    -s --silent                                                  hide all messages
    --ext <extensions>                                           watch only this file extensions

    ใ€œ็œ็•ฅใ€œ

    --v8                                                         enable v8 data collecting
    --event-loop-inspector                                       enable event-loop-inspector dump in pmx
    --deep-monitoring                                            enable all monitoring tools (equivalent to --v8 --event-loop-inspector --trace)
    -h, --help                                                   output usage information

  Commands:

    start [options] [name|namespace|file|ecosystem|id...]        start and daemonize an app
    trigger <id|proc_name|namespace|all> <action_name> [params]  trigger process action
    deploy <file|environment>                                    deploy your json

    ใ€œ็œ็•ฅใ€œ

    serve|expose [options] [path] [port]                         serve a directory over http via port
    autoinstall
    examples                                                     display pm2 usage examples
    *

ใงใฏใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚’่ตทๅ‹•ใ—ใฆใฟใพใ™ใ€‚

$ npx pm2 start dist/app.js
[PM2] Starting /path/to/dist/app.js in fork_mode (1 instance)
[PM2] Done.
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ id  โ”‚ name   โ”‚ namespace   โ”‚ version โ”‚ mode    โ”‚ pid      โ”‚ uptime โ”‚ โ†บ    โ”‚ status    โ”‚ cpu      โ”‚ mem      โ”‚ user     โ”‚ watching โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 0   โ”‚ app    โ”‚ default     โ”‚ 1.0.0   โ”‚ fork    โ”‚ 63874    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 30.0mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

1 instanceใจ่กจ็คบใ•ใ‚Œใฆใ„ใ‚‹ใฎใงใ€ใƒ—ใƒญใ‚ปใ‚นใฏใฒใจใคใชใฎใงใ—ใ‚‡ใ†ใญใ€‚nameใ‚’่ฆ‹ใ‚‹ใจใ€ใ‚นใ‚ฏใƒชใƒ—ใƒˆใฎๆ‹กๅผตๅญใ‚’้™คใ„ใŸ
้ƒจๅˆ†ใŒใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณๅใจใ—ใฆ่ช่ญ˜ใ•ใ‚Œใฆใ„ใ‚‹ๆฐ—ใŒใ—ใพใ™ใ€‚

ใ“ใฎtable่กจ็คบใฏใ€npx pm2 statusใ‚„npx pm2 lsใง็ขบ่ชใงใใพใ™ใ€‚

1ๅบฆๅœๆญขใ—ใพใ™ใ€‚

$ npx pm2 stop app                                                                                             
[PM2] Applying action stopProcessId on app [app](ids: [ 0 ])                                                                                                                 
[PM2] [app](0) โœ“                                                                                                                                                             
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                        
โ”‚ id  โ”‚ name   โ”‚ namespace   โ”‚ version โ”‚ mode    โ”‚ pid      โ”‚ uptime โ”‚ โ†บ    โ”‚ status    โ”‚ cpu      โ”‚ mem      โ”‚ user     โ”‚ watching โ”‚                                        
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค                                        
โ”‚ 0   โ”‚ app    โ”‚ default     โ”‚ 1.0.0   โ”‚ fork    โ”‚ 0        โ”‚ 0      โ”‚ 0    โ”‚ stopped   โ”‚ 0%       โ”‚ 0b       โ”‚ xxxxx โ”‚ disabled โ”‚                                        
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅ‰Š้™คใ€‚

$ npx pm2 delete app                                                                                           
[PM2] Applying action deleteProcessId on app [app](ids: [ 0 ])                                                                                                               
[PM2] [app](0) โœ“                                                                                                                                                             
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                     
โ”‚ id  โ”‚ name      โ”‚ namespace   โ”‚ version โ”‚ mode    โ”‚ pid      โ”‚ uptime โ”‚ โ†บ    โ”‚ status    โ”‚ cpu      โ”‚ mem      โ”‚ user     โ”‚ watching โ”‚                                     
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚’่ฆ‹ใชใŒใ‚‰ใ€ใƒ—ใƒญใ‚ปใ‚นๆ•ฐใ‚’ๅข—ใ‚„ใ—ใฆใฟใพใ™ใ€‚

PM2 - Cluster Mode

ใƒ—ใƒญใ‚ปใ‚นๆ•ฐใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใซใฏใ€-iใพใŸใฏ--instancesใ‚ชใƒ—ใ‚ทใƒงใƒณใ‚’ไฝฟ็”จใ™ใ‚‹ใ‚ˆใ†ใงใ™ใ€‚ๆญฃใ—ใใฏใ€ใƒ—ใƒญใ‚ปใ‚นๆ•ฐใ‚’ๆŒ‡ๅฎšใ™ใ‚‹
ใจใ„ใ†ใ‚ˆใ‚ŠCluster Modeใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใ‚ชใƒ—ใ‚ทใƒงใƒณใฎใ‚ˆใ†ใงใ™ใŒใ€‚

maxใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใจใ€ไฝฟ็”จใงใใ‚‹CPUใฎๆ•ฐใ ใ‘ใƒ—ใƒญใ‚ปใ‚นใ‚’่ตทๅ‹•ใ—ใพใ™ใ€‚

$ npx pm2 start -i max dist/app.js


## ใพใŸใฏ
$ npx pm2 start --instances max dist/app.js

ๆŒ‡ๅฎšใงใใ‚‹ๅ€คใจๆ„ๅ‘ณใฏใ€ใใ‚Œใžใ‚Œไปฅไธ‹ใซใชใ‚Šใพใ™ใ€‚

  • 0ใพใŸใฏmax โ€ฆ ไฝฟ็”จๅฏ่ƒฝใชCPUใฎๆ•ฐใ ใ‘ใƒ—ใƒญใ‚ปใ‚นใ‚’่ตทๅ‹•ใ™ใ‚‹
  • -1 โ€ฆ ไฝฟ็”จๅฏ่ƒฝใชCPU - 1ใ ใ‘ใƒ—ใƒญใ‚ปใ‚นใ‚’่ตทๅ‹•ใ™ใ‚‹
  • ๆ•ฐๅ€ค โ€ฆ ๆŒ‡ๅฎšใ—ใŸๆ•ฐใ ใ‘ใƒ—ใƒญใ‚ปใ‚นใ‚’่ตทๅ‹•ใ™ใ‚‹

ใพใšใฏ2ใคๅ‰ฒใ‚Šๅฝ“ใฆใฆใฟใพใ—ใ‚‡ใ†ใ€‚

$ npx pm2 start -i 2 dist/app.js
[PM2] Starting /path/to/dist/app.js in cluster_mode (2 instances)
[PM2] Done.
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ id  โ”‚ name   โ”‚ namespace   โ”‚ version โ”‚ mode    โ”‚ pid      โ”‚ uptime โ”‚ โ†บ    โ”‚ status    โ”‚ cpu      โ”‚ mem      โ”‚ user     โ”‚ watching โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 0   โ”‚ app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 68864    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 37.7mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 1   โ”‚ app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 68871    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 31.7mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

modeใŒforkใ‹ใ‚‰clusterใซใชใ‚Šใพใ—ใŸใ€‚ใ“ใ‚Œใฏใ€่ฒ ่ทๅˆ†ๆ•ฃใงใใ‚‹ใƒขใƒผใƒ‰ใงใ‚ใ‚‹ใ“ใจใ‚’ๆ„ๅ‘ณใ—ใฆใ„ใ‚‹ใ‚ˆใ†ใงใ™ใ€‚

ใ“ใฎ็Šถๆ…‹ใงใ€2ใคใƒชใ‚ฏใ‚จใ‚นใƒˆใ‚’ๆŠ•ใ’ใฆใฟใพใ™ใ€‚

$ time curl localhost:3000/fib?num=44
{"num":44,"result":701408733,"pid":68864}
real    0m10.784s
user    0m0.007s
sys     0m0.004s


$ time curl localhost:3000/fib?num=44
{"num":44,"result":701408733,"pid":68871}
real    0m10.805s
user    0m0.000s
sys     0m0.008s

ไธกๆ–นใจใ‚‚10็ง’ใปใฉใซใชใ‚Šใ€PIDใ‚‚ๅˆฅใ€…ใซใชใ‚Šใพใ—ใŸใ€‚

CPUไฝฟ็”จ็Ž‡ใ‚’่ฆ‹ใ‚‹ใจใ€2ใคCPUใ‚’ไฝฟใฃใฆใ„ใ‚‹ใ“ใจใŒ็ขบ่ชใงใใพใ™ใ€‚

03ๆ™‚34ๅˆ†19็ง’  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03ๆ™‚34ๅˆ†20็ง’  all   28.47    0.00    0.85    0.00    0.00    3.16    0.00    0.00    0.00   67.52
03ๆ™‚34ๅˆ†20็ง’    0    6.14    0.00    1.75    0.00    0.00   12.28    0.00    0.00    0.00   79.82
03ๆ™‚34ๅˆ†20็ง’    1    6.14    0.00    1.75    0.00    0.00   10.53    0.00    0.00    0.00   81.58
03ๆ™‚34ๅˆ†20็ง’    2  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03ๆ™‚34ๅˆ†20็ง’    3    6.06    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   93.94
03ๆ™‚34ๅˆ†20็ง’    4    4.12    0.00    2.06    0.00    0.00    0.00    0.00    0.00    0.00   93.81
03ๆ™‚34ๅˆ†20็ง’    5    5.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00    0.00   94.00
03ๆ™‚34ๅˆ†20็ง’    6    5.10    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   94.90
03ๆ™‚34ๅˆ†20็ง’    7  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00

03ๆ™‚34ๅˆ†20็ง’  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
03ๆ™‚34ๅˆ†21็ง’  all   28.57    0.00    0.85    0.00    0.00    3.51    0.00    0.00    0.00   67.07
03ๆ™‚34ๅˆ†21็ง’    0    6.78    0.00    0.85    0.00    0.00   15.25    0.00    0.00    0.00   77.12
03ๆ™‚34ๅˆ†21็ง’    1    2.78    0.00    0.93    0.00    0.00   10.19    0.00    0.00    0.00   86.11
03ๆ™‚34ๅˆ†21็ง’    2  100.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00
03ๆ™‚34ๅˆ†21็ง’    3    6.06    0.00    2.02    0.00    0.00    0.00    0.00    0.00    0.00   91.92
03ๆ™‚34ๅˆ†21็ง’    4    6.06    0.00    1.01    0.00    0.00    0.00    0.00    0.00    0.00   92.93
03ๆ™‚34ๅˆ†21็ง’    5    5.94    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00   93.07
03ๆ™‚34ๅˆ†21็ง’    6    7.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   93.00
03ๆ™‚34ๅˆ†21็ง’    7   99.01    0.00    0.99    0.00    0.00    0.00    0.00    0.00    0.00    0.00

ใ‚‚ใกใ‚ใ‚“ใ€ใ“ใ‚ŒไปฅไธŠใƒชใ‚ฏใ‚จใ‚นใƒˆๆ•ฐใ‚’ๅข—ใ‚„ใ™ใจ้…ๅปถใ™ใ‚‹ใ“ใจใซใชใ‚Šใพใ™ใ€‚ไฝฟใˆใ‚‹ใ‚ˆใ†ใซๆŒ‡ๅฎšใ—ใŸCPUใฏ2ใคใชใฎใงใ€
ๅŒๆ™‚ใซๅ‡ฆ็†ใงใใ‚‹ใฎใฏ2ใคใพใงใงใ™ใ€‚

ๅฎŸ่กŒไธญใซใƒ—ใƒญใ‚ปใ‚นๆ•ฐใ‚’ๅข—ใ‚„ใ™ๅ ดๅˆใฏใ€pm2 scaleใ‚ชใƒ—ใ‚ทใƒงใƒณใงใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณๅใจใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นๆ•ฐใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚

$ npx pm2 scale app 4
[PM2] Scaling up application
[PM2] Scaling up application
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ id  โ”‚ name   โ”‚ namespace   โ”‚ version โ”‚ mode    โ”‚ pid      โ”‚ uptime โ”‚ โ†บ    โ”‚ status    โ”‚ cpu      โ”‚ mem      โ”‚ user     โ”‚ watching โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 0   โ”‚ app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 68864    โ”‚ 106s   โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 48.7mb   โ”‚ xxxx โ”‚ disabled โ”‚
โ”‚ 1   โ”‚ app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 68871    โ”‚ 106s   โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 48.5mb   โ”‚ xxxx โ”‚ disabled โ”‚
โ”‚ 2   โ”‚ app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 69009    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 37.0mb   โ”‚ xxxx โ”‚ disabled โ”‚
โ”‚ 3   โ”‚ app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 69016    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 30.8mb   โ”‚ xxxx โ”‚ disabled โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅฐใ•ใใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚

$ npx pm2 scale app 2
[PM2] Applying action deleteProcessId on app [0](ids: [ 0 ])
[PM2] [app](0) โœ“
[PM2] Applying action deleteProcessId on app [1](ids: [ 1 ])
[PM2] [app](1) โœ“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ id  โ”‚ name   โ”‚ namespace   โ”‚ version โ”‚ mode    โ”‚ pid      โ”‚ uptime โ”‚ โ†บ    โ”‚ status    โ”‚ cpu      โ”‚ mem      โ”‚ user     โ”‚ watching โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 2   โ”‚ app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 69009    โ”‚ 47s    โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 46.3mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 3   โ”‚ app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 69016    โ”‚ 47s    โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 47.7mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

็ขบ่ชใงใใŸใฎใงใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚’ๅ‰Š้™คใ€‚

$ npx pm2 delete app

ใกใชใฟใซใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณๅใซใคใ„ใฆใฏ--nameใ‚ชใƒ—ใ‚ทใƒงใƒณใงๆ˜Ž็คบ็š„ใซๆŒ‡ๅฎšใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

$ npx pm2 start --name myapp dist/app.js
[PM2] Starting /path/to/dist/app.js in fork_mode (1 instance)
[PM2] Done.
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ id  โ”‚ name     โ”‚ namespace   โ”‚ version โ”‚ mode    โ”‚ pid      โ”‚ uptime โ”‚ โ†บ    โ”‚ status    โ”‚ cpu      โ”‚ mem      โ”‚ user     โ”‚ watching โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 0   โ”‚ myapp    โ”‚ default     โ”‚ 1.0.0   โ”‚ fork    โ”‚ 67118    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 18.4mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใ“ใ“ใพใงใงใ€CPUใ‚’่ค‡ๆ•ฐไฝฟใˆใ‚‹ใ‚ˆใ†ใซNode.jsใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚’ๆง‹ๆˆใงใใŸใ“ใจใฏ็ขบ่ชใงใใพใ—ใŸใ€‚

PM2ใฎ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ—ใฆใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚’็ฎก็†ใ™ใ‚‹

ใ“ใ“ใพใงใฏใ‚ณใƒžใƒณใƒ‰ใƒฉใ‚คใƒณใ‚ชใƒ—ใ‚ทใƒงใƒณใงๆŒ‡ๅฎšใ—ใฆใใพใ—ใŸใŒใ€PM2ใงใฏ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚‚ๆ‰ฑใˆใ‚‹ใ‚ˆใ†ใงใ™ใ€‚

PM2 - Cluster Mode

PM2 - Ecosystem File

ใ“ใกใ‚‰ใ‚‚่ฉฆใ—ใฆใฟใพใ—ใ‚‡ใ†ใ€‚

pm2 initใพใŸใฏpm2 ecosystemใ‚’ไฝฟใฃใฆ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ™ใ‚‹ใฟใŸใ„ใงใ™ใ€‚

$ npx pm2 init --help

  Usage: ecosystem|init [options] [mode]

  generate a process conf file. (mode = null or simple)

  Options:

    -h, --help  output usage information

pm2 ecosystemใฎๆ–นใงไฝœใฃใฆใฟใพใ—ใ‚‡ใ†ใ€‚ใƒขใƒผใƒ‰ใฏsimpleใจใ—ใพใ™ใ€‚

$ npx pm2 ecosystem simple
File /path/to/ecosystem.config.js generated

ecosystem.config.jsใจใ„ใ†ใƒ•ใ‚กใ‚คใƒซใŒไฝœๆˆใ•ใ‚Œใพใ—ใŸใ€‚

ใกใชใฟใซใ€ใชใซใ‚‚ๆŒ‡ๅฎšใ—ใชใ„ๅ ดๅˆใฏ

$ npx pm2 ecosystem

ใ“ใ‚“ใชใƒ•ใ‚กใ‚คใƒซใŒไฝœๆˆใ•ใ‚Œใพใ™ใ€‚

ecosystem.config.js

module.exports = {
  apps : [{
    script: 'index.js',
    watch: '.'
  }, {
    script: './service-worker/',
    watch: ['./service-worker']
  }],

  deploy : {
    production : {
      user : 'SSH_USERNAME',
      host : 'SSH_HOSTMACHINE',
      ref  : 'origin/master',
      repo : 'GIT_REPOSITORY',
      path : 'DESTINATION_PATH',
      'pre-deploy-local': '',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production',
      'pre-setup': ''
    }
  }
};

ไปŠๅ›žใฏใ€simpleใงไฝœๆˆใ—ใŸใƒ•ใ‚กใ‚คใƒซใ‚’็ทจ้›†ใ—ใพใ™ใ€‚ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณๅใ‚’express-appใ€ใƒ—ใƒญใ‚ปใ‚นๆ•ฐใ‚’4ใ€
ใƒขใƒผใƒ‰ใฏclusterใ‚’ๆŒ‡ๅฎšใ€‚

ecosystem.config.js

module.exports = {
  apps : [{
    name   : "express-app",
    script : "./dist/app.js",
    instances: 4,
    exec_mode: "cluster"
  }]
}

ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚’่ฆ‹ใ‚‹ใจใ€modeใ‚’clusterใซๆŒ‡ๅฎšใ—ใชใ„ใจ่ฒ ่ทๅˆ†ๆ•ฃใŒ่กŒใ‚ใ‚Œใชใ„ใ€ใฟใŸใ„ใซๆ›ธใ„ใฆใ„ใ‚‹ใฎใงใ™ใŒใ€
ใ“ใฎๆŒ‡ๅฎšใ‚’ๅค–ใ—ใฆใ‚‚instancesใ‚’ๆŒ‡ๅฎšใ—ใฆใŠใใจclusterใง่ตทๅ‹•ใ—ใพใ—ใŸใŒโ€ฆ๏ผŸ

ๅฎŸ่กŒใฎ้š›ใฏใ€ๅ„ใ‚ณใƒžใƒณใƒ‰ใฎๅผ•ๆ•ฐใซ่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚

$ npx pm2 start ecosystem.config.js

ไปŠๅ›žใฏใ€4ใคใฎใƒ—ใƒญใ‚ปใ‚นใŒ่ตทๅ‹•ใ—ใพใ—ใŸใ€‚

[PM2][WARN] Applications express-app not running, starting...
[PM2] App [express-app] launched (4 instances)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ id  โ”‚ name           โ”‚ namespace   โ”‚ version โ”‚ mode    โ”‚ pid      โ”‚ uptime โ”‚ โ†บ    โ”‚ status    โ”‚ cpu      โ”‚ mem      โ”‚ user     โ”‚ watching โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 0   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10133    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 43.0mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 1   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10140    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 39.9mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 2   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10147    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 37.9mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 3   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10154    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 31.6mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฎๅฎŸ่กŒ็ตๆžœใฎ็ขบ่ชใฏใ€็œ็•ฅใ—ใพใ™ใ€‚

ใ‚นใƒ†ใƒผใ‚ฟใ‚น็ขบ่ชใ€‚

$ npx pm2 status ecosystem.config.js
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ id  โ”‚ name           โ”‚ namespace   โ”‚ version โ”‚ mode    โ”‚ pid      โ”‚ uptime โ”‚ โ†บ    โ”‚ status    โ”‚ cpu      โ”‚ mem      โ”‚ user     โ”‚ watching โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 0   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10133    โ”‚ 49s    โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 47.0mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 1   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10140    โ”‚ 49s    โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 47.6mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 2   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10147    โ”‚ 49s    โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 47.3mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 3   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10154    โ”‚ 49s    โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 48.4mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅ‰Š้™คใ€‚

$ npx pm2 delete ecosystem.config.js
[PM2] [express-app](0) โœ“
[PM2] [express-app](1) โœ“
[PM2] [express-app](2) โœ“
[PM2] [express-app](3) โœ“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ id  โ”‚ name      โ”‚ namespace   โ”‚ version โ”‚ mode    โ”‚ pid      โ”‚ uptime โ”‚ โ†บ    โ”‚ status    โ”‚ cpu      โ”‚ mem      โ”‚ user     โ”‚ watching โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฎใƒชใƒญใƒผใƒ‰ใงใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นๆ•ฐใฎๅค‰ๆ›ดใฏใงใใชใ•ใใ†ใ ใฃใŸใฎใงใ€1ๅบฆๅ‰Š้™คใ—ใฆinstancesใ‚’maxใซๅค‰ๆ›ดใ—ใฆ

ecosystem.config.js

module.exports = {
  apps : [{
    name   : "express-app",
    script : "./dist/app.js",
    instances: "max",
    exec_mode: "cluster"
  }]
}

่ตทๅ‹•ใ€‚

$ npx pm2 start ecosystem.config.js
[PM2][WARN] Applications express-app not running, starting...
[PM2] App [express-app] launched (8 instances)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ id  โ”‚ name           โ”‚ namespace   โ”‚ version โ”‚ mode    โ”‚ pid      โ”‚ uptime โ”‚ โ†บ    โ”‚ status    โ”‚ cpu      โ”‚ mem      โ”‚ user     โ”‚ watching โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ 0   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10678    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 49.8mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 1   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10685    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 50.2mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 2   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10692    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 49.3mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 3   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10699    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 45.7mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 4   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10710    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 43.6mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 5   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10721    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 40.7mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 6   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10732    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 38.0mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ”‚ 7   โ”‚ express-app    โ”‚ default     โ”‚ 1.0.0   โ”‚ cluster โ”‚ 10743    โ”‚ 0s     โ”‚ 0    โ”‚ online    โ”‚ 0%       โ”‚ 31.6mb   โ”‚ xxxxx โ”‚ disabled โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅฐ‚ๆœ‰ใงใใ‚‹็’ฐๅขƒใ ใฃใŸใ‚‰ใ€maxใงใ„ใ„ใ‚“ใงใ—ใ‚‡ใ†ใญใ€‚

ใชใŠใ€่จญๅฎšใƒ•ใ‚กใ‚คใƒซใ‚’ไฝฟใฃใฆ็ฎก็†ใ—ใฆใ„ใ‚‹็Šถๆ…‹ใงใ‚‚pm2 scaleใงใƒ—ใƒญใ‚ปใ‚นๆ•ฐใ‚’ๅค‰ๆ›ดใงใใพใ—ใŸใŒใ€่จญๅฎšใƒ•ใ‚กใ‚คใƒซใฎๅ†…ๅฎนใจ
ใšใ‚Œใ‚‹ใฎใงๅพฎๅฆ™โ€ฆใ€‚

ใพใ‚ใ€ไปŠๅ›ž็ขบ่ชใ—ใŸใ„ใ“ใจใฏใ ใ„ใŸใ„ใงใใŸใฎใง่‰ฏใ—ใจใ—ใพใ—ใ‚‡ใ†ใ€‚

ใพใจใ‚

Node.jsใฎใƒ—ใƒญใ‚ปใ‚นใƒžใƒใƒผใ‚ธใƒฃใƒผใ€PM2ใ‚’่ฉฆใ—ใฆใฟใพใ—ใŸใ€‚

PM2ใซใฏไป–ใซใ‚‚ๅคšใใฎๆฉŸ่ƒฝใŒใ‚ใ‚‹ใ‚ˆใ†ใงใ™ใ—ใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚‚่ค‡ๆ•ฐ็ฎก็†ใงใใ‚‹ใ‚ˆใ†ใงใ™ใŒใ€ไปŠๅ›žใฏใ‚ฏใƒฉใ‚นใ‚ฟใƒผๅŒ–ใซ
็ตžใฃใฆไฝฟใฃใฆใฟใพใ—ใŸใ€‚

ไป–ใซใ‚‚ๅฐ‘ใ—ๆฐ—ใซใชใ‚‹ใจใ“ใ‚ใฏใ‚ใ‚‹ใฎใงใ€ใพใŸ่ฆ‹ใ‚‹ๆฉŸไผšใ‚’ไฝœใ‚ŠใŸใ„ใจๆ€ใ„ใพใ™ใ€‚