PM2 Uygulaması Neden Sürekli Yeniden Başlıyor? Restart Sorunu ve Çözümleri

kralbenim · 28 Eylül 2026 · 1 görüntülenme · 0 cevap

PM2 uygulamasının sürekli yeniden başlaması, uygulamanın çalıştıktan kısa süre sonra kapanması, hata vermesi veya PM2 tarafından belirlenen bir yeniden başlatma koşulunun tetiklenmesi nedeniyle oluşabilir. En sık nedenler uygulama hataları, eksik environment değişkenleri, veritabanı bağlantı sorunları, bellek problemleri, yanlış dosya yolu ve port çakışmalarıdır.


İlk kontrol edilmesi gereken yer:

pm2 status

ardından:

pm2 logs uygulama-adi

olmalıdır.

Sadece uygulamayı tekrar tekrar restart etmek yerine neden kapandığını bulmak gerekir.

PM2 restart sayısı nasıl kontrol edilir?

Çalışan uygulamaları görmek için:

pm2 status

veya:

pm2 list

kullanabilirsiniz.

Listede ↺ veya restart sayısını gösteren ilgili sütun sürekli artıyorsa uygulama bir restart döngüsüne girmiş olabilir.

Örneğin birkaç saniye içerisinde:

12 → 18 → 27 → 40

şeklinde yükseliyorsa uygulamanın başlangıç sırasında hata verme ihtimali yüksektir.

İlk olarak PM2 loglarını kontrol edin

Belirli uygulamanın loglarını görmek için:

pm2 logs uygulama-adi

kullanabilirsiniz.

Tüm PM2 loglarını görmek için:

pm2 logs

kullanılabilir.

Burada:

- JavaScript exception
- Veritabanı bağlantı hatası
- Eksik modül
- Port çakışması
- Dosya bulunamadı
- Permission hatası
- Environment değişkeni problemi

gibi gerçek hata mesajını arayın.

Uygulama ayrıntıları nasıl görüntülenir?

PM2 uygulamasının ayrıntıları için:

pm2 describe uygulama-adi

kullanabilirsiniz.

Burada:

- Script yolu
- Çalışma dizini
- Restart sayısı
- Uptime
- Process ID
- Status

gibi bilgiler görülebilir.

Yanlış script veya çalışma dizini kullanılıyorsa problem burada fark edilebilir.

Port Already in Use hatası

Uygulamanız örneğin 3000 portunu kullanmaya çalışıyor ancak başka bir process aynı portu dinliyorsa uygulama kapanabilir.

Portu kontrol etmek için:

ss -lntp | grep ':3000'

kullanılabilir.

Node.js tarafında:

EADDRINUSE

benzeri bir hata görülmesi portun kullanımda olduğuna işaret edebilir.

Bu durumda çalışan process'in ne olduğunu tespit etmeden rastgele sonlandırmayın.

Veritabanı bağlantısı başarısız olabilir

Node.js uygulamanız PostgreSQL gibi bir veritabanına ihtiyaç duyuyorsa bağlantı kurulamadığında başlangıç sırasında kapanabilir.

Örneğin:

- PostgreSQL durmuş olabilir.
- DATABASE_URL yanlış olabilir.
- Kullanıcı veya parola değişmiş olabilir.
- Veritabanı adı yanlış olabilir.
- Ağ bağlantısı başarısız olabilir.

PostgreSQL servisinin durumunu uygun sistemlerde:

systemctl status postgresql

ile kontrol edebilirsiniz.

Ancak servisin çalışıyor olması uygulamanın doğru bağlantı bilgilerini kullandığını garanti etmez.

Environment değişkenlerini kontrol edin

Uygulamanızın ihtiyaç duyduğu:

- PORT
- DATABASE_URL
- API anahtarları
- Session secret
- Uygulama ortamı

gibi değişkenlerden biri eksikse uygulama başlangıç sırasında hata verebilir.

Özellikle uygulama terminalde manuel çalışırken düzgün, PM2 ile çalıştırıldığında hatalıysa environment farklarını araştırın.

PM2 ecosystem dosyası kullanılıyorsa yapılandırmayı kontrol edin.

Hassas değerleri loglarda veya herkese açık depolarda paylaşmayın.

Eksik Node.js paketi restart döngüsü oluşturabilir

Uygulama:

Cannot find module

benzeri hata veriyorsa gerekli dependency eksik olabilir.

Projenin doğru dizininde:

npm install

çalıştırılması gerekebilir.

Ancak production ortamında dependency değişikliklerini kontrollü yapmak gerekir.

package.json ve lock dosyasının proje sürümüyle uyumlu olduğundan emin olun.

Yanlış Node.js sürümü kullanılabilir

Uygulama belirli bir Node.js sürümüne ihtiyaç duyuyorsa sunucudaki farklı sürüm başlangıç hatalarına neden olabilir.

Kontrol:

node -v

ve:

npm -v

PM2'nin kullandığı Node.js ortamının terminalde kullandığınız ortamla aynı olup olmadığını da kontrol etmek gerekebilir.

Özellikle Node.js sürüm yöneticileri kullanılıyorsa bu ayrım önem kazanabilir.

Kod hatası uygulamayı kapatabilir

Uygulama başlangıcında yakalanmamış bir exception oluşuyorsa Node.js process'i kapanabilir.

PM2 process'in kapandığını gördüğünde yeniden başlatabilir.

Sonuç:

Başlat → hata → kapan → PM2 yeniden başlat → tekrar hata

şeklinde bir döngü oluşur.

Bu durumda PM2 sorunun kaynağı değildir; yalnızca kapanan uygulamayı yeniden çalıştırmaktadır.

Asıl hata uygulama loglarından bulunmalıdır.

Uygulamayı PM2 dışında çalıştırmak faydalı olabilir

Sorunu teşhis etmek için uygulamayı geçici olarak doğrudan çalıştırmak gerçek hata mesajını daha net gösterebilir.

Örneğin:

node app.js

veya projenize göre:

node server.js

Ancak production uygulamasını durdurmadan önce bunun hizmet kesintisine neden olup olmayacağını değerlendirin.

Amaç PM2'yi kaldırmak değil, uygulamanın kendisinin başlatılabilir olup olmadığını test etmektir.

RAM yetersizliği restart sorununa neden olabilir

Sunucuda RAM tükeniyorsa uygulama sistem tarafından sonlandırılabilir.

Kontrol için:

free -h

kullanabilirsiniz.

Process'leri görmek için:

top

veya:

htop

kullanılabilir.

Kernel'in Out Of Memory nedeniyle process sonlandırdığından şüpheleniyorsanız:

journalctl -k | grep -i -E 'out of memory|oom|killed process'

ile ilgili kayıtları araştırabilirsiniz.

Memory leak olabilir mi?

Uygulamanın RAM kullanımı:

200 MB → 400 MB → 800 MB → 1.5 GB

şeklinde sürekli artıyor ve restart sonrasında tekrar düşük seviyeden başlayıp aynı davranışı gösteriyorsa memory leak ihtimali araştırılabilir.

Ancak yüksek RAM kullanımı tek başına memory leak kanıtı değildir.

Uygulamanın gerçek iş yükü ve bellek davranışı analiz edilmelidir.

PM2 max memory restart ayarı olabilir

PM2 uygulamaları belirli bir bellek sınırına ulaştığında yeniden başlatılacak şekilde yapılandırılabilir.

Örneğin ecosystem yapılandırmasında max_memory_restart benzeri bir ayar bulunabilir.

Uygulama düzenli aralıklarla belirli bir RAM seviyesine ulaştığında restart oluyorsa bu yapılandırmayı kontrol edin.

Bu özellik faydalı bir koruma mekanizması olabilir ancak gerçek bir memory leak varsa yalnızca semptomu yönetir.

Watch modu restart oluşturabilir

PM2 watch özelliği aktifse proje dosyalarında değişiklik olduğunda uygulama yeniden başlatılabilir.

Eğer uygulamanın kendisi:

- Log dosyası
- Cache
- Upload
- Geçici dosya

oluşturuyor ve bunlar watch kapsamındaysa beklenmeyen restart'lar meydana gelebilir.

PM2 yapılandırmasında watch ve ignore_watch ayarlarını kontrol edin.

Production ortamında gerçekten ihtiyaç yoksa watch özelliğini kullanmamak daha uygun olabilir.

Dosya izinleri sorun oluşturabilir

Uygulama başlangıç sırasında belirli bir:

- Dosyaya
- Upload klasörüne
- Log dizinine
- Config dosyasına

erişmeye çalışıyor ancak yetkisi bulunmuyorsa hata vererek kapanabilir.

Loglarda:

EACCES

veya:

Permission denied

benzeri mesajlar görülebilir.

Çözüm olarak her dosyaya geniş izinler vermek yerine uygulamanın gerçekten ihtiyaç duyduğu kullanıcı ve grup izinleri doğru şekilde yapılandırılmalıdır.

Disk tamamen dolu olabilir

Diskte alan kalmadığında uygulama:

- Log yazamayabilir.
- Geçici dosya oluşturamayabilir.
- Upload kaydedemeyebilir.
- Veritabanı işlemlerinde hata yaşayabilir.

Kontrol:

df -h

Inode kullanımı için:

df -i

kullanılabilir.

Disk doluysa hangi dosyaların alan tükettiğini belirleyip kontrollü temizlik yapılmalıdır.

Uygulama başlangıçta başka servisi bekliyor olabilir

Node.js uygulaması:

- PostgreSQL
- Redis
- Harici API
- Başka bir backend

gibi servislere bağımlı olabilir.

Sunucu reboot olduğunda PM2 uygulaması bağımlı servis hazır olmadan başlayabilir.

Uygulama bağlantı hatasını yönetmeden kapanıyorsa restart döngüsü oluşabilir.

Bu durumda uygulamanın retry mekanizması ve servis başlangıç düzeni incelenmelidir.

PM2 restart sayısı neden eski olabilir?

PM2 üzerinde gördüğünüz restart sayısının yüksek olması uygulamanın şu anda sürekli çöktüğü anlamına gelmeyebilir.

Process uzun süredir çalışıyorsa geçmiş restart'lar birikmiş olabilir.

Bu nedenle:

- Restart sayısı
- Uptime
- Log zamanı
- Sayının şu anda artıp artmadığı

birlikte değerlendirilmelidir.

PM2 loglarının kendisi disk doldurabilir

Sürekli restart olan uygulama her başlangıçta aynı hatayı yazıyorsa PM2 logları hızla büyüyebilir.

Kontrol:

du -sh ~/.pm2/logs

Mevcut logları gerektiğinde boşaltmak için:

pm2 flush

kullanılabilir.

Ancak önce önemli hata kayıtlarını inceleyin.

Kalıcı çözüm hatanın kendisini düzeltmek ve log rotation kullanmaktır.

Nginx 502 hatası PM2 restart sorunuyla ilişkili olabilir

Nginx reverse proxy arkasında çalışan Node.js uygulaması sürekli kapanıyorsa Nginx backend'e bağlanamadığı anlarda kullanıcılar:

502 Bad Gateway

görebilir.

Bu durumda Nginx'i sürekli restart etmek yerine:

pm2 status

ve:

pm2 logs uygulama-adi

kontrol edilmelidir.

Backend stabil hale geldiğinde 502 problemi de ortadan kalkabilir.

PM2'yi tamamen silip yeniden kurmak gerekir mi?

Çoğu restart probleminde hayır.

Sorun genellikle:

- Uygulama kodu
- Environment
- Port
- Veritabanı
- RAM
- Disk
- Dependency
- PM2 yapılandırması

ile ilgilidir.

PM2'yi yeniden kurmak gerçek nedeni çözmeyebilir.

Önce loglardan hata belirlenmelidir.

PM2 sürekli restart sorunu için hızlı kontrol sırası

Şu sırayla ilerleyebilirsiniz:

1. pm2 status
2. Restart sayısının gerçekten artıp artmadığını kontrol edin.
3. pm2 logs uygulama-adi
4. pm2 describe uygulama-adi
5. Portu ss -lntp ile kontrol edin.
6. Environment değişkenlerini kontrol edin.
7. Veritabanı ve diğer bağımlılıkları kontrol edin.
8. free -h ile RAM durumuna bakın.
9. df -h ve df -i ile disk durumunu kontrol edin.
10. OOM kayıtlarını araştırın.
11. Watch ve max_memory_restart ayarlarını kontrol edin.
12. Gerekirse uygulamayı PM2 dışında başlatıp gerçek hatayı inceleyin.

Sık yapılan hatalar

PM2 restart sorununda şu yaklaşımlardan kaçının:

- Sürekli pm2 restart çalıştırmak
- Loglara bakmadan PM2'yi yeniden kurmak
- Uygulama hatasını PM2 hatası sanmak
- Port çakışmasını kontrol etmemek
- Environment değişkenlerini unutmak
- Veritabanı bağlantısını kontrol etmemek
- RAM ve OOM durumunu gözden kaçırmak
- Disk doluluğunu kontrol etmemek
- Watch modunun gereksiz restart oluşturabileceğini unutmak

Özetle, PM2 uygulaması sürekli yeniden başlıyorsa yapılması gereken ilk işlem restart etmek değil, uygulamanın neden kapandığını bulmaktır.

En temel teşhis:

pm2 status

pm2 logs uygulama-adi

pm2 describe uygulama-adi

ile başlayabilir.

Ardından uygulama → port → environment → veritabanı → RAM → disk → PM2 yapılandırması sırasıyla kontrol edilerek restart döngüsünün gerçek nedeni bulunabilir.