$ cd /opt/myapp
pm2 -weight: 500;">start server.js --name myapp
cd /opt/myapp
pm2 -weight: 500;">start server.js --name myapp
cd /opt/myapp
pm2 -weight: 500;">start server.js --name myapp
┌────┬──────┬───────┬───┬─────┬──────────┐
│ id │ name │ mode │ ↺ │ cpu │ memory │
├────┼──────┼───────┼───┼─────┼──────────┤
│ 0 │ myapp│ fork │ 0 │ 0% │ 45.2 MB │
└────┴──────┴───────┴───┴─────┴──────────┘
┌────┬──────┬───────┬───┬─────┬──────────┐
│ id │ name │ mode │ ↺ │ cpu │ memory │
├────┼──────┼───────┼───┼─────┼──────────┤
│ 0 │ myapp│ fork │ 0 │ 0% │ 45.2 MB │
└────┴──────┴───────┴───┴─────┴──────────┘
┌────┬──────┬───────┬───┬─────┬──────────┐
│ id │ name │ mode │ ↺ │ cpu │ memory │
├────┼──────┼───────┼───┼─────┼──────────┤
│ 0 │ myapp│ fork │ 0 │ 0% │ 45.2 MB │
└────┴──────┴───────┴───┴─────┴──────────┘
pm2 -weight: 500;">start server.js --name myapp -i max
pm2 -weight: 500;">start server.js --name myapp -i max
pm2 -weight: 500;">start server.js --name myapp -i max
┌────┬──────┬─────────┬───┬─────┬──────────┐
│ id │ name │ mode │ ↺ │ cpu │ memory │
├────┼──────┼─────────┼───┼─────┼──────────┤
│ 0 │ myapp│ cluster │ 0 │ 0% │ 42.1 MB │
│ 1 │ myapp│ cluster │ 0 │ 0% │ 41.8 MB │
│ 2 │ myapp│ cluster │ 0 │ 0% │ 42.3 MB │
│ 3 │ myapp│ cluster │ 0 │ 0% │ 41.5 MB │
└────┴──────┴─────────┴───┴─────┴──────────┘
┌────┬──────┬─────────┬───┬─────┬──────────┐
│ id │ name │ mode │ ↺ │ cpu │ memory │
├────┼──────┼─────────┼───┼─────┼──────────┤
│ 0 │ myapp│ cluster │ 0 │ 0% │ 42.1 MB │
│ 1 │ myapp│ cluster │ 0 │ 0% │ 41.8 MB │
│ 2 │ myapp│ cluster │ 0 │ 0% │ 42.3 MB │
│ 3 │ myapp│ cluster │ 0 │ 0% │ 41.5 MB │
└────┴──────┴─────────┴───┴─────┴──────────┘
┌────┬──────┬─────────┬───┬─────┬──────────┐
│ id │ name │ mode │ ↺ │ cpu │ memory │
├────┼──────┼─────────┼───┼─────┼──────────┤
│ 0 │ myapp│ cluster │ 0 │ 0% │ 42.1 MB │
│ 1 │ myapp│ cluster │ 0 │ 0% │ 41.8 MB │
│ 2 │ myapp│ cluster │ 0 │ 0% │ 42.3 MB │
│ 3 │ myapp│ cluster │ 0 │ 0% │ 41.5 MB │
└────┴──────┴─────────┴───┴─────┴──────────┘
pm2 -weight: 500;">start server.js --name myapp -i 2
pm2 -weight: 500;">start server.js --name myapp -i 2
pm2 -weight: 500;">start server.js --name myapp -i 2
PORT=3000 NODE_ENV=production pm2 -weight: 500;">start server.js --name myapp -i max
PORT=3000 NODE_ENV=production pm2 -weight: 500;">start server.js --name myapp -i max
PORT=3000 NODE_ENV=production pm2 -weight: 500;">start server.js --name myapp -i max
pm2 -weight: 500;">start server.js --name myapp --env production \ --node-args="--max-old-space-size=512" \ -- --port 3000
pm2 -weight: 500;">start server.js --name myapp --env production \ --node-args="--max-old-space-size=512" \ -- --port 3000
pm2 -weight: 500;">start server.js --name myapp --env production \ --node-args="--max-old-space-size=512" \ -- --port 3000
cd /opt/myapp
# .env file sits here alongside server.js
pm2 -weight: 500;">start server.js --name myapp
cd /opt/myapp
# .env file sits here alongside server.js
pm2 -weight: 500;">start server.js --name myapp
cd /opt/myapp
# .env file sits here alongside server.js
pm2 -weight: 500;">start server.js --name myapp
pm2 -weight: 500;">start server.js --name myapp --max-memory--weight: 500;">restart 512M
pm2 -weight: 500;">start server.js --name myapp --max-memory--weight: 500;">restart 512M
pm2 -weight: 500;">start server.js --name myapp --max-memory--weight: 500;">restart 512M
pm2 -weight: 500;">start server.js --name myapp --watch --ignore-watch="node_modules logs"
pm2 -weight: 500;">start server.js --name myapp --watch --ignore-watch="node_modules logs"
pm2 -weight: 500;">start server.js --name myapp --watch --ignore-watch="node_modules logs"
pm2 reload myapp
pm2 reload myapp
pm2 reload myapp
# PM2 -weight: 500;">status
pm2 -weight: 500;">status # Port listening?
ss -tlnp | grep 3000 # Hit the app
-weight: 500;">curl http://localhost:3000 # Logs
pm2 logs myapp --lines 50
# PM2 -weight: 500;">status
pm2 -weight: 500;">status # Port listening?
ss -tlnp | grep 3000 # Hit the app
-weight: 500;">curl http://localhost:3000 # Logs
pm2 logs myapp --lines 50
# PM2 -weight: 500;">status
pm2 -weight: 500;">status # Port listening?
ss -tlnp | grep 3000 # Hit the app
-weight: 500;">curl http://localhost:3000 # Logs
pm2 logs myapp --lines 50
pm2 -weight: 500;">start /opt/app1/server.js --name api -i 2
pm2 -weight: 500;">start /opt/app2/app.js --name frontend
pm2 -weight: 500;">start /opt/app3/worker.js --name worker pm2 save
pm2 -weight: 500;">start /opt/app1/server.js --name api -i 2
pm2 -weight: 500;">start /opt/app2/app.js --name frontend
pm2 -weight: 500;">start /opt/app3/worker.js --name worker pm2 save
pm2 -weight: 500;">start /opt/app1/server.js --name api -i 2
pm2 -weight: 500;">start /opt/app2/app.js --name frontend
pm2 -weight: 500;">start /opt/app3/worker.js --name worker pm2 save
┌────┬──────────┬─────────┬───┬─────┬──────────┐
│ id │ name │ mode │ ↺ │ cpu │ memory │
├────┼──────────┼─────────┼───┼─────┼──────────┤
│ 0 │ api │ cluster │ 0 │ 0% │ 42.1 MB │
│ 1 │ api │ cluster │ 0 │ 0% │ 41.8 MB │
│ 2 │ frontend │ fork │ 0 │ 0% │ 38.5 MB │
│ 3 │ worker │ fork │ 0 │ 0% │ 35.2 MB │
└────┴──────────┴─────────┴───┴─────┴──────────┘
┌────┬──────────┬─────────┬───┬─────┬──────────┐
│ id │ name │ mode │ ↺ │ cpu │ memory │
├────┼──────────┼─────────┼───┼─────┼──────────┤
│ 0 │ api │ cluster │ 0 │ 0% │ 42.1 MB │
│ 1 │ api │ cluster │ 0 │ 0% │ 41.8 MB │
│ 2 │ frontend │ fork │ 0 │ 0% │ 38.5 MB │
│ 3 │ worker │ fork │ 0 │ 0% │ 35.2 MB │
└────┴──────────┴─────────┴───┴─────┴──────────┘
┌────┬──────────┬─────────┬───┬─────┬──────────┐
│ id │ name │ mode │ ↺ │ cpu │ memory │
├────┼──────────┼─────────┼───┼─────┼──────────┤
│ 0 │ api │ cluster │ 0 │ 0% │ 42.1 MB │
│ 1 │ api │ cluster │ 0 │ 0% │ 41.8 MB │
│ 2 │ frontend │ fork │ 0 │ 0% │ 38.5 MB │
│ 3 │ worker │ fork │ 0 │ 0% │ 35.2 MB │
└────┴──────────┴─────────┴───┴─────┴──────────┘
pm2 show myapp
pm2 show myapp
pm2 show myapp
pm2 logs myapp --err --lines 100
pm2 logs myapp --err --lines 100
pm2 logs myapp --err --lines 100
-weight: 600;">sudo lsof -i :3000
-weight: 600;">sudo lsof -i :3000
-weight: 600;">sudo lsof -i :3000
pm2 describe myapp
pm2 describe myapp
pm2 describe myapp - NVM, Node.js, and PM2 installed (Part 1)
- A Node.js application with a server.js or app.js entry point
- Dependencies installed (-weight: 500;">npm -weight: 500;">install or -weight: 500;">npm ci) - ✅ Part 1: NVM + PM2 + startup + log rotation
- ✅ Part 2: App running with PM2, cluster mode, memory limits, zero-downtime reloads