Linux'ta Zombi Süreçler: Bul, Kaldır, Önle

15 dakikalık okuma - 19 Mayıs 2026

hero section cover
İçindekiler
  • Linux'ta Zombi İşlemler: Bunları Bulma ve Kaldırma
  • Sunucularda Zombi İşlemlerin Önemi
  • Zombi İşlemleri Nasıl Bulunur
  • Zombi İşlemleri Nasıl Kaldırılır
  • Zombi İşlemleri Önleme
  • Sonuç
Paylaş

Linux'ta zombi süreçleri nasıl tanımlayacağınızı, kaldıracağınızı ve önleyeceğinizi öğrenin. Sunucu yöneticileri için komutlar, kod düzeltmeleri ve izleme ipuçları.

Linux'ta Zombi İşlemler: Bunları Bulma ve Kaldırma

Zombi işlem, yürütülmesi tamamlanmış ancak çekirdeğin işlem tablosunda hala bir yer kaplayan alt işlemdir. Bu işlem, ana işlemin wait() çağırmadığı için var olur. Zombiler CPU veya bellek tüketmez, ancak her biri bir PID tutar. Bunlar yeterince birikirse, sisteminiz yeni işlemler başlatamaz. Bu yazı, bunları nasıl tespit edeceğinizi, kaldıracağınızı ve en başından ortaya çıkmalarını nasıl engelleyeceğinizi ele almaktadır.


 

Sunucularda Zombi İşlemlerin Önemi

Tek bir zombi zararsızdır. Sorun, bunlar birikmeye başladığında ortaya çıkar. Linux'un sınırlı bir PID alanı vardır: 32 bit sistemlerde 32.768, 64 bit sistemlerde ise 4.194.304'e kadar. Zombi süreçler süreç tablosunu doldurursa, çekirdek yeni süreçler oluşturamaz. Bu da yeni bağlantı, yeni iş parçacığı ve yeni hiçbir şeyin olamayacağı anlamına gelir.

Apache ve Nginx gibi web sunucuları, trafiği yönetmek için alt süreçler oluşturdukları için özellikle risk altındadır. Karşılaştırmalı testler, yoğun bir web sunucusunda zombiler biriktiğinde verimde %48'lik bir düşüş olduğunu göstermiştir. 2019'da, bir Kubernetes DNS pod'undaki Golang kanal sızıntısı, tek bir düğümde 26.000'den fazla zombi oluşturarak süreç tablosunu doldurmuş ve küme genelinde DNS çözümlemeyi çökertmiştir.

Aşağıdaki tablo, normal bir işlem ile bir zombi arasındaki temel farkları göstermektedir:

ÖzellikNormal İşlemZombi İşlem
Durum sembolüR, S, D veya TZ (geçersiz)
CPU / BellekEtkin kullanım0% / 0 (zaten sonlandırıldı)
İşlem tablosu girişiBir yuvaBir yuva
Yanıt kill -9Hemen sonlandırırEtkisi yok (zaten ölü)
Çekirdek belleğiTam işlem tanımlayıcıYalnızca minimum çıkış durumu

Önemli çıkarım: kill -9 bir zombiyi temizleyemezsiniz. O zaten ölmüştür. Onu temizlemenin tek yolu, ana sürecin onu toplamasını sağlamak ya da ana süreci öldürerek init (PID 1) onu otomatik olarak devralıp temizlesin.

Zombi İşlemleri Nasıl Bulunur

Zombiler, STAT sütununda bir Z ile ve <defunct> komut adının yanında görünür. Bunları şu komutla listeleyin:

ps aux | grep -w Z

Kaldırma işlemi için ihtiyacınız olacak ana işlem kimliğini (PPID) görmek için:

ps -eo pid,ppid,stat,comm | grep -w Z

Bu top komut, başlık satırında toplam zombi sayısını da bildirir. Hızlı ve etkileşimsiz bir kontrol için:

top -bn1 | grep zombie

pstree ile üst süreci izleme

Zombinin PID'sini aldıktan sonra, onu sorumlu ana sürece kadar geriye doğru izleyin:

pstree -p -s <zombie_pid>

Bu, init zombiye kadar tüm soy ağacını gösterir. pstree yüklü değilse, ps auxf benzer bir ASCII ağaç görünümü sunar.

İzleme amacıyla zombileri sayma

Grep işleminin kendisini hariç tutan temiz bir sayım:

ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'

Sorun giderme sırasında sürekli izleme için:

watch -n 1 'ps aux | grep -w Z | wc -l'

Zombi İşlemleri Nasıl Kaldırılır

Zombiler, yalnızca çıkış durumları toplanarak kaldırılabilir. Bu, ana süreç üzerinden çalışmak anlamına gelir.

1. Ana süreci bulun.

ps -o ppid= -p <zombie_pid>

2. Ana sürece, alt süreçlerini sonlandırması için sinyal gönderin.

kill -SIGCHLD <parent_pid>

Bu, ana sürece wait() çağırmasını söyler. Bu işlem kesintiye neden olmaz ve düzgün çalışan uygulamalarda işe yarar.

3. SIGCHLD işe yaramazsa, hizmeti yeniden başlatın.

systemctl restart <service_name>

4. Eğer ana süreç yanıt vermiyorsa, onu sonlandırın.

kill <parent_pid>

Ya da SIGTERM'i görmezden geliyorsa:

kill -9 <parent_pid>

Ana süreç öldüğünde, init (PID 1) ya da systemd yetim kalan zombileri evlat edinir ve hemen toplar. Üretim sistemlerinde dikkatli olun. Ana süreci sonlandırmak, tüm aktif alt süreçleri de sonlandırır.

5. Temizleme işlemini doğrulayın.

ps aux | awk '$8 ~ /Z/ {count++} END {print count+0}'

Sayı 0 ise, sorun yok demektir.

Zombi İşlemleri Önleme

Kodunuzdaki alt süreçleri yönetin

Çoğu zombi birikiminin temel nedeni, hiçbir zaman wait(). Sorunu kaynağında giderin:

  • C: signal(SIGCHLD, SIG_IGN); 'i, alt süreçlerin çıkış bilgilerini otomatik olarak atacak şekilde ayarlayın veya waitpid(-1, NULL, WNOHANG) kullanarak asenkron olarak temizleyin.
  • Python: Otomatik olarak bekleyen subprocess.run()kullanın, bu otomatik olarak bekler. Popenkullanıyorsanız, proc.wait() 'yi açıkça çağırın.
  • Bash: wait arka planda çalışan işleri başlatan komut dosyalarının sonuna ekleyin.

systemd'yi doğru şekilde yapılandırın

systemd tarafından yönetilen hizmetler için, bu ayarlar zombi birikimini önler:

  • KillMode=control-group hizmet durduğunda tüm alt işlemlerin birlikte sonlandırılmasını sağlar.
  • TimeoutStopSec systemd SIGKILL göndermeden önce üst işleme alt işlemleri temizlemesi için zaman tanır.
  • WatchdogSec yanıt vermeyen hizmetleri otomatik olarak yeniden başlatır ve ana sürecin kilitlenip temizlemeyi durdurduğu durumları yakalar.

İşlem tablonuzu izleyin

Zombileri saymak ve sayı bir eşiği aşarsa uyarı vermek için her 15 dakikada bir çalışan bir cron işi ayarlayın:

ps aux | awk '$8 ~ /Z/' | wc -l

Ayrıca, mevcut sayıyı /proc/sys/kernel/pid_maxile karşılaştırarak izleyin. Eğer %80'i aşarsa, sorun haline gelmeden önce araştırın. Normal çalışma sırasında birkaç geçici zombi endişelenecek bir şey değildir. Sıfıra düşmeyen artan bir sayı, düzeltilmesi gereken bir uygulama hatasına işaret eder.

Sonuç

Zombi süreçler, temizlenmemiş ölü çocuklardır. CPU veya bellek kullanmazlar, ancak PID'leri tutarlar ve dolu bir süreç tablosu, sunucunuzun yararlı herhangi bir şey yapmasını engeller.

  • Bunları ps aux | grep -w Z ile bulun ve pstree.
  • Ebeveyne SIGCHLD komutunu göndererek, hizmeti yeniden başlatarak veya son çare olarak üst süreci sonlandırarak kaldırın.
  • Bunu önlemek için wait(), systemd'yi doğru şekilde yapılandırarak ve işlem tablonuzu izleyerek önleyin.

Yüksek trafikli iş yükleri çalıştırıyorsanız ve tam kök erişimine sahip güvenilir bir altyapıya ihtiyacınız varsa, FDC'nin özel sunucuları size işlem yönetimi ve sistem yapılandırması üzerinde tam kontrol sağlar.

Blog

Bu hafta öne çıkanlar

Daha fazla makale
Linux'ta Zombi Süreçler: Bul, Kaldır, Önle

Linux'ta Zombi Süreçler: Bul, Kaldır, Önle

Linux'ta zombi süreçleri nasıl tanımlayacağınızı, kaldıracağınızı ve önleyeceğinizi öğrenin. Sunucu yöneticileri için komutlar, kod düzeltmeleri ve izleme ipuçları.

15 dakikalık okuma - 19 Mayıs 2026

Linux Sunucu Güçlendirme Kontrol Listesi

15 dakikalık okuma - 8 Mayıs 2026

Daha fazla makale
background image

Sorularınız mı var veya özel bir çözüme mi ihtiyacınız var?

icon

Esnek seçenekler

icon

Küresel erişim

icon

Anında dağıtım

icon

Esnek seçenekler

icon

Küresel erişim

icon

Anında dağıtım