Kullanılmayan PHP-FPM Servisi MySQL’i Nasıl Çökertti?

# Virtualmin Sunucuda Kullanılmayan PHP-FPM Servisi MySQL’i Neden Durdurdu?

Sunucuda birden fazla PHP sürümü çalıştıranlar için beklenmedik bir tuzak: kullanılmayan bir PHP-FPM servisi, RAM’i sessiz sedasız tüketir ve sonunda kritik servisleri çökertir.

## Ortam

Contabo’dan aldığım VPS üzerinde, Contabo’nun hazır Ubuntu imajıyla kurulmuş bir Virtualmin sunucusu. Sunucuda birden fazla domain barındırıyorum, büyük çoğunluğu WordPress.

## Sorun

Sunucuda 4 farklı PHP sürümü kuruluydu. Farklı domainler farklı PHP sürümlerini kullanıyor, bu gayet normal bir durum. Ancak PHP 8.4 kuruluydu ama hiçbir domain tarafından aktif olarak kullanılmıyordu.

Buna rağmen PHP 8.4’ün PHP-FPM servisi arka planda çalışmaya devam ediyordu. Zaman içinde bu servis RAM’i doldurdu. RAM dolunca sistem normalde swap alanına taşar, ancak sunucuda swap tanımlı değildi. Sonuç: en kritik servislerden biri olan MySQL durdu ve sunucudaki tüm siteler veritabanına bağlanamaz hale geldi.

## Swap Neden Yoktu?

Contabo’nun hazır Ubuntu imajında swap alanı varsayılan olarak gelmiyor. Bu bir hata değil, bilinçli bir tercih.

Modern VPS ve bulut imajlarının çoğu swap’ı devre dışı bırakır. Bunun birkaç nedeni var: swap kullanımı bir sorunun belirtisidir, çözümü değil — yani “RAM yetmiyorsa daha fazla RAM al” anlayışı hâkim. Bunun yanında SSD diskli sunucularda swap’a sürekli yazma diskin ömrünü kısaltır. Contabo gibi sağlayıcılar hazır imajı minimal tutar, swap kurma kararını kullanıcıya bırakır.

Dolayısıyla swap’ın olmayışı beklenmedik bir durum değil. Ancak bu senaryoda küçük bir swapfile olsaydı sisteme biraz daha nefes aldırırdı — yine de asıl sorunu yalnızca erteleyecekti.

## Nasıl Fark Ettim?

Daha önce de MySQL’in durduğu olmuştu. O deneyimden sonra cron ile çalışan bir PHP scripti yazdım: her 15 dakikada bir MySQL’e bağlanmayı deniyor, bağlanamazsa hazırladığım Telegram botu aracılığıyla bana mesaj gönderiyor. Bu sefer de uyarıyı o bot attı.

## Neden Oldu?

PHP-FPM, her sürüm için ayrı bir servis olarak çalışır. Virtualmin’de yeni bir PHP sürümü kurulduğunda bu servis otomatik başlar ve sistem yeniden başlatıldığında da devreye girer. Hiçbir domain o sürümü kullanmıyor olsa bile servis RAM ayırmaya devam eder.

Sunucuda RAM zaten sınırlıysa ve birden fazla kullanılmayan PHP sürümü varsa, bu servisler zamanla belleği tüketir.

## Çözüm

Kullanılmayan PHP sürümlerinin PHP-FPM servislerini durdurmak ve devre dışı bırakmak gerekiyor.

SSH üzerinden:

bash

# Çalışan PHP-FPM servislerini listele

systemctl list-units | grep php-fpm

# Kullanılmayan sürümün servisini durdur ve devre dışı bırak (örnek: 8.4)

systemctl stop php8.4-fpm

systemctl disable php8.4-fpm

“`

MySQL’i yeniden başlatmak için:

“`bash

systemctl start mysql

“`

Virtualmin arayüzünden de **System Settings → Re-check Configuration** ile servislerin durumunu kontrol edebilirsiniz.

## Öğrenilen Dersler

– PHP sürümü kurulurken aktif olarak kullanılmayacaksa PHP-FPM servisini de hemen devre dışı bırak.

– Birden fazla PHP sürümü olan sunucularda RAM kullanımını düzenli izle.

– MySQL’in beklenmedik şekilde durması her zaman MySQL’in kendi sorununda kaynaklanmaz; RAM/swap tükenmesi de sık karşılaşılan bir nedendir.

– Kritik servisler için basit bir izleme mekanizması kurmak değerli — Telegram bot + cron gibi hafif bir çözüm bile erken uyarı sağlayabilir.

*Virtualmin, Ubuntu, Contabo VPS, PHP-FPM, MySQL*

Yorum bırakın

Scroll to Top