format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightPM2 Nedir ve Node.js Uygulamaları İçin Neden Gereklidir?
- arrow_rightPM2 Kurulumu
- arrow_rightTemel PM2 Komutları
- arrow_rightUygulama Başlatma
- arrow_rightProcess Yönetimi Komutları
- arrow_rightPM2 Yapılandırma Dosyası (ecosystem.config.js)
- arrow_rightPM2 ile Otomatik Yeniden Başlatma
- arrow_rightPM2 ile Zero-Downtime Deployment
- arrow_rightPM2 Log Yönetimi
- arrow_rightPM2 Monitoring ve Dashboard
- arrow_rightPM2 vs Forever vs Systemd Karşılaştırması
- arrow_rightPM2 ile Çalışan Uygulama Örneği
- arrow_rightPM2 Best Practices
- arrow_rightSonuç
PM2 Nedir ve Node.js Uygulamaları İçin Neden Gereklidir?
PM2, Node.js uygulamaları için geliştirilmiş bir production-grade process manager'dır. Production ortamlarında çalışan Node.js uygulamalarının %85'inden fazlası PM2 kullanmaktadır (Node.js Foundation araştırmasına göre). PM2, uygulamalarınızın sürekli çalışmasını, otomatik yeniden başlatılmasını, yük dengelemesini ve gelişmiş izleme özelliklerini sağlar.
PM2 kullanmadan Node.js uygulaması çalıştırmak, sunucu yeniden başlatıldığında veya uygulama çöktüğünde manuel müdahale gerektirir. Bu durum, web sitesi performansını olumsuz etkiler ve kullanıcı deneyimini bozar.
PM2 Kurulumu
PM2'yi kurmak için Node.js ve npm'in sisteminizde yüklü olması gerekir. Aşağıdaki komutla PM2'yi global olarak yükleyebilirsiniz:
npm install -g pm2
Kurulum tamamlandıktan sonra sürüm kontrolü yapmak için:
pm2 --version
Temel PM2 Komutları
Uygulama Başlatma
Node.js uygulamanızı PM2 ile başlatmak için aşağıdaki komutu kullanın:
pm2 start app.js
Birden fazla instance başlatmak için:
pm2 start app.js -i 4
Bu komut, 4 ayrı process oluşturarak sunucu kaynaklarını daha verimli kullanmanızı sağlar.
Process Yönetimi Komutları
PM2'nin en çok kullanılan komutları şunlardır:
- pm2 list - Tüm çalışan processleri listeler
- pm2 stop [id/name] - Belirtilen processi durdurur
- pm2 restart [id/name] - Processi yeniden başlatır
- pm2 delete [id/name] - Processi tamamen kaldırır
- pm2 monit - Canlı izleme paneli açar
PM2 Yapılandırma Dosyası (ecosystem.config.js)
Karmaşık uygulamalar için ecosystem.config.js dosyası kullanmak, yönetimi kolaylaştırır. Bu dosya, uygulama ayarlarınızı merkezi bir konumda tutmanızı sağlar.
module.exports = {
apps: [{
name: 'my-app',
script: './app.js',
instances: 'max',
exec_mode: 'cluster',
env: {
NODE_ENV: 'development'
},
env_production: {
NODE_ENV: 'production'
},
error_file: './logs/error.log',
out_file: './logs/out.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
merge_logs: true
}]
}
Bu yapılandırma ile uygulamanız otomatik olarak felaket kurtarma yeteneklerine sahip olur.
PM2 ile Otomatik Yeniden Başlatma
PM2'nin en önemli özelliklerinden biri, uygulama çöktüğünde otomatik olarak yeniden başlatılmasıdır. Bu özelliği yapılandırmak için:
pm2 start app.js --max_restarts 10 --exp_backoff_restart_delay 100
Bu ayarlar, maximum 10 kez yeniden başlatma denemesi yapar ve her deneme arasında 100ms bekleme süresi ekler.
Memory Tabanlı Yeniden Başlatma
Belirli bir bellek miktarını aştığında otomatik yeniden başlatma için:
pm2 start app.js --max-memory-restart 512M
Bu özellik, veri merkezi ortamlarında bellek sızıntılarına karşı koruma sağlar.
PM2 ile Zero-Downtime Deployment
Production ortamlarında uygulama güncellemesi yaparken kesinti yaşamamak için PM2'nin graceful reload özelliğini kullanın:
pm2 reload all --update-env
Bu komut, tüm instance'ları sırayla yeniden başlatarak kullanıcıların kesintisiz hizmet almasını sağlar.
PM2 Log Yönetimi
PM2, uygulama loglarını otomatik olarak yönetir. Log dosyalarını görüntülemek için:
- pm2 logs - Tüm logları görüntüler
- pm2 logs [app-name] - Belirli uygulamanın loglarını gösterir
- pm2 flush - Tüm logları temizler
Log rotasyonu için pm2-logrotate eklentisini kurmanız önerilir:
pm2 install pm2-logrotate
PM2 Monitoring ve Dashboard
PM2, uygulama performansını izlemek için kapsamlı araçlar sunar:
pm2 monit
Bu komut, CPU kullanımı, bellek tüketimi ve process durumlarını canlı olarak gösterir. Ayrıca PM2 Plus cloud servisi ile uzaktan izleme yapabilirsiniz.
PM2 vs Forever vs Systemd Karşılaştırması
| Özellik | PM2 | Forever | Systemd |
|---|---|---|---|
| Kurulum Kolaylığı | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| Cluster Modu | ✅ | ❌ | ✅ |
| Load Balancing | ✅ | ❌ | Manuel |
| Log Yönetimi | ✅ | ✅ | Sınırlı |
| Zero-Downtime | ✅ | ✅ | ✅ |
| Memory Monitoring | ✅ | ❌ | Sınırlı |
| Dashboard | ✅ | ❌ | ❌ |
PM2, özellikle Node.js uygulamaları için optimize edilmiş yapısıyla öne çıkmaktadır. Docker ortamlarında PM2 kullanımı da oldukça yaygındır.
PM2 ile Çalışan Uygulama Örneği
Express.js uygulaması için tam PM2 yapılandırması:
// ecosystem.config.js
module.exports = {
apps: [{
name: 'express-api',
script: 'server.js',
instances: 'max',
exec_mode: 'cluster',
env: {
PORT: 3000,
NODE_ENV: 'development'
},
env_production: {
PORT: 8080,
NODE_ENV: 'production'
},
error_file: './logs/error.log',
out_file: './logs/out.log',
time: true,
max_memory_restart: '1G',
autorestart: true,
max_restarts: 10,
min_uptime: '10s'
}]
}
Bu yapılandırmayı kullanarak uygulamanızı başlatın:
pm2 start ecosystem.config.js --env production
PM2 Best Practices
- Always in Production: PM2'yi production ortamlarında mutlaka kullanın. Geliştirme ortamında test edin, production'da yayınlayın.
- Log Rotation: Disk doluluğunu önlemek için pm2-logrotate eklentisini mutlaka kurun.
- Memory Limits: Bellek sınırları belirleyerek uygulama stabilitesini sağlayın.
- Environment Variables: Hassas bilgileri .env dosyasında tutun, yapılandırma dosyasından referans verin.
- Startup Script: Sunucu yeniden başladığında PM2 processlerinin otomatik başlaması için startup script oluşturun:
pm2 startup
# Çıktıda verilen komutu çalıştırın
pm2 save
Sonuç
PM2, Node.js uygulamalarının production ortamlarında güvenilir şekilde çalışması için vazgeçilmez bir araçtır. Otomatik yeniden başlatma, yük dengeleme, log yönetimi ve monitoring özellikleriyle uygulama uptime'ınızı önemli ölçüde artırır.
PM2'yi hosting çözümleri ile birlikte kullanarak maximum uptime ve performans elde edebilirsiniz. Özellikle mikroservis mimarisi kullanan ekipler için PM2, modern web mimarisi standartlarının başında gelmektedir.