ใใใฏใใชใซใใใใใฆๆธใใใใฎ๏ผ
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ใ็ดนไปใใใฆใใพใใ
- StrongLoop Process Manager
- PM2 - Home
- GitHub - foreversd/forever: A simple CLI tool for ensuring that a given script runs continuously (i.e. forever)
ForeverใฏใPM2ใnodemonใไฝฟ็จใใใใจใๅงใใฆใใพใใใ
ใใใใฎใใผใซใซๅฏพใใๆฏ่ผใฏใStrongLoop PMใ่กใฃใฆใใพใใ
StrongLoop PMใฎ่ณๆใชใฎใงใๆใๆนใซใฏๆณจๆใ่ฆใๆฐใฏใใพใใใ
ใใฃใจStrongLoop PMใจPM2ใ่ฆๆฏในใใจStrongLoop PMใฎๆนใใงใใใใจใๅคใใไปฅไธใ็ฎ็ซใฃใๅทฎใชใใใซ
ๆใใพใใ
- ใใใญใคๆใฎHTTPใฎใตใใผใ
- ใใใฑใผใธใณใฐใDockerใธใฎใใใญใคใฎใตใใผใ
- ๅฎ่กไธญใฎใฏใฉในใฟใผใฎใตใคใบๅคๆด๏ผโป๏ผ
- ใญใผใใใฉใณใตใผใฎ่ชๅๆงๆ๏ผโป๏ผ
- ใใญใใกใคใชใณใฐใฎใตใใผใ
โป โฆ ไปๅๆธใใ็ฏๅฒใง่ฆใฆใใใจใใใฎใใใใฏPM2ใงใใงใใใใงใใโฆ๏ผ
PM2ใฏNode.jsใขใใชใฑใผใทใงใณไปฅๅคใฎใใฎใใใญใปใน็ฎก็ใงใใใใใงใใ
ไปๅใฏใPM2ใไฝฟใฃใฆใฟใใใจๆใใพใใ
PM2
PM2ใฏใdaemonใใญใปในใ็ฎก็ใใใใผใซใงใใ
ใใญใฅใกใณใใ่ฆใฆใใใพใใพใจใพใฃใ่ชฌๆใใชใใฎใงใใใใใใใใผใธใซใใๆฉ่ฝใ่ฆใใจใใใชๆใใฟใใใงใใ
Quick Startใ่ฆใใจใใใใใฎๆฉ่ฝใฎ้ฐๅฒๆฐใใใฃใใๆดใใใจใใงใใพใใ
ไปๅใฏใใใใใฎๆฉ่ฝใฎไธญใฎ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ๅใใฆใฟใพใใใใ
ใพใใฏใคใณในใใผใซใใใ
ใใญใฅใกใณใใฏ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 โ โโโโโโโดโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโดโโโโโโโดโโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโดโโโโโโโโโโโ
ใใญใฅใกใณใใ่ฆใชใใใใใญใปในๆฐใๅขใใใฆใฟใพใใ
ใใญใปในๆฐใๆๅฎใใใซใฏใ-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 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ใซใฏไปใซใๅคใใฎๆฉ่ฝใใใใใใงใใใใขใใชใฑใผใทใงใณใ่คๆฐ็ฎก็ใงใใใใใงใใใไปๅใฏใฏใฉในใฟใผๅใซ
็ตใฃใฆไฝฟใฃใฆใฟใพใใใ
ไปใซใๅฐใๆฐใซใชใใจใใใฏใใใฎใงใใพใ่ฆใๆฉไผใไฝใใใใจๆใใพใใ