PM2 — process boshqarish, cluster mode, monitoring
Muammodan boshlaylik
Siz serveringizni ishga tushirdingiz:
node app.js
Ishlaydi. Lekin:
- Terminal yopilsa — server to'xtaydi
- Server crash bo'lsa — qayta ishga tushmaydi
- Kompyuter qayta yoqilsa — server o'zi ishga tushmaydi
- 8 yadroli serverda faqat 1 ta yadroni ishlatayapsiz
Bularning hammasi production da jiddiy muammo. PM2 shu muammolarni hal qiladi.
PM2 nima?
PM2 — Node.js jarayonlarini boshqaruvchi dastur. Xuddi operatsion tizimning service menejeri kabi — jarayonlarni ishga tushiradi, kuzatadi, crash bo'lsa qayta tiklaydi.
Hayotiy o'xshatma: siz restoran egasisiz. Oshpaz (Node.js jarayoni) ishga keldi. Lekin oshpaz kasal bo'lib qolsa — restoran yopilmasligi kerak. PM2 — bu menejer. Oshpaz ketsa, darhol o'rniga yangisini topadi.
O'rnatish
npm install -g pm2
Global o'rnatiladi — bir marta, hamma loyihalarda ishlatiladi.
Asosiy buyruqlar
# Ishga tushirish:
pm2 start app.js
# Ro'yxat ko'rish:
pm2 list
# Log ko'rish:
pm2 logs
# To'xtatish:
pm2 stop app.js
# Qayta ishga tushirish:
pm2 restart app.js
# O'chirish (ro'yxatdan):
pm2 delete app.js
pm2 list natijasi:
┌─────┬──────────┬─────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├─────┼──────────┼─────────┼──────┼───────────┼──────────┼──────────┤
│ 0 │ app │ fork │ 0 │ online │ 0% │ 45.2mb │
└─────┴──────────┴─────────┴──────┴───────────┴──────────┴──────────┘
Avtomatik qayta tiklash
PM2 ning asosiy kuchi — jarayon crash bo'lsa, avtomatik qayta ishga tushiradi.
pm2 start app.js
Endi app.js ichida throw new Error() bo'lsa — PM2 darhol qayta ishga tushiradi. pm2 list da ↺ ustuni necha marta qayta tiklangani ko'rsatadi.
Cluster mode — ko'p yadroli server
22-darsda cluster modulini o'rgandik — ko'p jarayon yaratish uchun. PM2 buni bir buyruq bilan qiladi:
pm2 start app.js -i max
-i max — CPU core soni qadar jarayon yaratadi. 8 yadroli server → 8 ta jarayon.
pm2 start app.js -i 4 # aniq 4 ta jarayon
pm2 start app.js -i max # core soni qadar
pm2 start app.js -i 0 # max bilan bir xil
pm2 list natijasi:
┌─────┬──────────┬─────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├─────┼──────────┼─────────┼──────┼───────────┼──────────┼──────────┤
│ 0 │ app │ cluster │ 0 │ online │ 0% │ 45.2mb │
│ 1 │ app │ cluster │ 0 │ online │ 0% │ 44.8mb │
│ 2 │ app │ cluster │ 0 │ online │ 0% │ 45.1mb │
│ 3 │ app │ cluster │ 0 │ online │ 0% │ 44.9mb │
└─────┴──────────┴─────────┴──────┴───────────┴──────────┴──────────┘
4 ta jarayon, hammasi bir portda — PM2 so'rovlarni taqsimlaydi.
ecosystem.config.js — sozlamalar fayli
Buyruq qatori o'rniga sozlamalarni faylda saqlash — yaxshi amaliyot:
// ecosystem.config.js
module.exports = {
apps: [
{
name: 'my-api',
script: './src/main.js',
instances: 'max', // cluster mode
exec_mode: 'cluster',
watch: false, // fayl o'zgarganda qayta ishga tushirma
max_memory_restart: '500M', // 500 MB dan oshsa qayta tiklash
env: {
NODE_ENV: 'development',
PORT: 3000,
},
env_production: {
NODE_ENV: 'production',
PORT: 8080,
},
error_file: './logs/error.log',
out_file: './logs/out.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss',
},
],
};
Ishga tushirish:
pm2 start ecosystem.config.js
pm2 start ecosystem.config.js --env production # production sozlamalari bilan
Tizim ishga tushganda avtomatik start
Server qayta yoqilganda PM2 va jarayonlar avtomatik ishga tushishi uchun:
# Tizim uchun startup skript yaratish:
pm2 startup
# Bu buyruq biror narsa chiqaradi, masalan:
# sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u user --hp /home/user
# O'sha buyruqni nusxalab ishga tushiring
# Hozirgi holatni saqlash:
pm2 save
Endi server qayta yoqilsa — PM2 va barcha jarayonlar avtomatik ishga tushadi.
Monitoring
pm2 monit
Real vaqtda CPU, xotira, log — barchasi bir ekranda:
┌─ Process List ──────────────────────────────────────────────────────────────┐
│ App name │ id │ mode │ pid │ status │ ↺ │ cpu │ mem │ user │ │
│ my-api │ 0 │ cluster │ 12345 │ online │ 0 │ 2% │ 45.2 MB │ user │ │
│ my-api │ 1 │ cluster │ 12346 │ online │ 0 │ 1% │ 44.8 MB │ user │ │
└─────────────────────────────────────────────────────────────────────────────┘
┌─ my-api Logs ───────────────────────────────────────────────────────────────┐
│ [2026-05-07 10:00:01] GET /api/users 200 12ms │
│ [2026-05-07 10:00:02] POST /api/orders 201 45ms │
└─────────────────────────────────────────────────────────────────────────────┘
Zero-downtime reload
Cluster mode da kod yangilanishini server to'xtatmasdan qilish mumkin:
pm2 reload my-api
restart — barcha jarayonlarni bir vaqtda to'xtatib, qayta ishga tushiradi. Bir necha soniya server ishlamaydi.
reload — jarayonlarni birin-ketin yangilaydi. Biri yangilanayotganda qolganlar ishlaydi. Server hech qachon to'xtamaydi.
Production da har doim reload ishlatiladi.
Tez-tez uchraydigan xatolar
Cluster mode da session saqlash:
// Xato — har jarayon alohida xotira:
const sessions = new Map(); // jarayon 1 da saqlangan session
// jarayon 2 ko'rmaydi!
// To'g'ri — Redis da saqlash:
// connect-redis yoki ioredis bilan
watch: true production da:
// Xato — production da fayllar o'zgarsa qayta ishga tushadi:
{ watch: true }
// To'g'ri — production da o'chirish:
{ watch: false }
// Yangilash uchun: pm2 reload
Log fayllarini tozalamaslik:
# Log fayllari to'lib ketishi mumkin
pm2 flush # loglarni tozalash
pm2 install pm2-logrotate # avtomatik aylantirish
Xulosa
PM2 — production da Node.js jarayonlarini boshqarish uchun standart vosita. Crash bo'lsa qayta tiklaydi, cluster mode bilan ko'p yadroli serverdan foydalanadi, tizim ishga tushganda avtomatik start qiladi.
| Buyruq | Nima qiladi |
|---|---|
pm2 start app.js |
Ishga tushirish |
pm2 start app.js -i max |
Cluster mode |
pm2 list |
Jarayonlar ro'yxati |
pm2 logs |
Loglar |
pm2 monit |
Real vaqt monitoring |
pm2 reload |
Zero-downtime yangilash |
pm2 startup && pm2 save |
Tizim ishga tushganda avtomatik start |
Node.js kursi tugadi 🎉
Siz Node.js ning asosiy tushunchalarini o'rgandingiz:
- Event Loop va asinxron dasturlash
- Core modullar:
path,os,fs,crypto,EventEmitter - Stream va Buffer
- Process boshqarish:
process,child_process,worker_threads,cluster - Amaliy: Memory Leak va PM2
Keyingi qadam — Express.js yoki NestJS bilan real API yozish.