Zombiprotsessid Linuxis: Leia, eemalda, takista

15 min lugemine - 19. mai 2026

hero section cover
Sisukord
  • Zombie-protsessid Linuxis: kuidas neid leida ja eemaldada
  • Miks zombiprotsessid on serverites olulised
  • Kuidas leida zombiprotsesse
  • Kuidas eemaldada zombiprotsesse
  • Zombie-protsesside vältimine
  • Kokkuvõte
Jaga

Õppige, kuidas tuvastada, eemaldada ja vältida zombiprotsesse Linuxis. Käsklused, koodiparandused ja seire näpunäited serverite administraatoritele.

Zombie-protsessid Linuxis: kuidas neid leida ja eemaldada

Zombie-protsess on alamprotsess, mis on täitmise lõpetanud, kuid hõivab endiselt koha tuuma protsessitabelis. See eksisteerib, kuna vanemprotsess ei ole kutsunud wait() selle lõpetamisstaatuse kogumiseks. Zombie-protsessid ei tarbi CPU-d ega mälu, kuid igaühel on oma PID. Kui neid koguneb piisavalt palju, ei saa teie süsteem luua uusi protsesse. See postitus käsitleb, kuidas neid leida, eemaldada ja vältida nende tekkimist.


 

Miks zombiprotsessid on serverites olulised

Üksik zombi on ohutu. Probleem algab siis, kui neid koguneb palju. Linuxil on piiratud PID-ruum: 32-bitistes süsteemides 32 768, 64-bitistes kuni 4 194 304. Kui zombiprotsessid täidavad protsessitabeli, ei saa tuum luua uusi protsesse. See tähendab, et ei teki uusi ühendusi, uusi tööniite ega midagi uut.

Veebiserverid nagu Apache ja Nginx on eriti haavatavad, kuna nad loovad liikluse käitlemiseks alamprotsesse. Võrdlustestid on näidanud, et kui zombid kogunevad hõivatud veebiserverisse, langeb läbilaskevõime 48%. 2019. aastal tekitas Golangi kanali lekkimine Kubernetesi DNS-podis ühele sõlme üle 26 000 zombi, täites protsessitabeli ja põhjustades DNS-lahenduse kokkujooksmise kogu klastris.

Allolev tabel näitab peamisi erinevusi tavalise protsessi ja zombi vahel:

OmadusTavaline protsessZombie-protsess
Seisundi sümbolR, S, D või TZ (töötamatu)
CPU / MäluAktiivne kasutamine0% / 0 (juba lõpetatud)
Protsessitabeli kanneÜks pesaÜks pesa
Vastus kill -9Lõpetatakse koheEi mõjuta (juba surnud)
TuumamäluTäielik protsessi deskriptorAinult minimaalne väljumisstaatus

Oluline järeldus: sa ei saa kill -9 zombit. See on juba surnud. Ainus viis selle tühistamiseks on lasta vanemprotsessil see koristada või tappa vanemprotsess, nii et init (PID 1) päriks ja koristaks selle automaatselt.

Kuidas leida zombiprotsesse

Zombid kuvatakse Z-tähega veerus STAT ja <defunct> käskude nimede kõrval. Loetlege need järgmiselt:

ps aux | grep -w Z

Et näha vanemprotsessi ID-d (PPID), mida vajate eemaldamiseks:

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

Käsk top Käsk näitab pealkirjas ka zombide koguarvu. Kiireks mitteinteraktiivseks kontrolliks:

top -bn1 | grep zombie

Vanemprotsessi jälgimine pstree abil

Kui teil on zombi PID, jälgige seda tagasi vastutava vanemprotsessini:

pstree -p -s <zombie_pid>

See näitab täielikku päritolu init kuni zombini. Kui pstree ei ole installitud, ps auxf annab sarnase ASCII-puuvõrguvaate.

Zombide loendamine seireks

Puhas loend, mis välistab grep-protsessi enda:

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

Järjepidevaks seireks veaotsingu ajal:

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

Kuidas eemaldada zombiprotsesse

Zombisid saab eemaldada ainult nende väljumisstaatuse kogumise teel. See tähendab, et tuleb töötada läbi vanemprotsessi.

1. Leia vanemprotsess.

ps -o ppid= -p <zombie_pid>

2. Anna vanemprotsessile märku, et see koristaks oma lapsed.

kill -SIGCHLD <parent_pid>

See käsib vanemprotsessil kutsuda wait() kõikide lõpetatud tütarprotsesside puhul. See ei häiri tööd ja toimib korralikult käituvate rakenduste puhul.

3. Kui SIGCHLD ei tööta, taaskäivita teenus.

systemctl restart <service_name>

4. Kui vanemprotsess ei vasta, lõpeta see.

kill <parent_pid>

Või kui ta eirab SIGTERM-i:

kill -9 <parent_pid>

Kui vanemprotsess sureb, init (PID 1) või systemd võta omaks orvuks jäänud zombid ja korista need kohe ära. Ole tootmissüsteemides ettevaatlik. Vanema protsessi lõpetamine lõpetab ka kõik selle aktiivsed lapsed.

5. Kontrolli puhastamist.

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

Kui loend on 0, on kõik korras.

Zombie-protsesside vältimine

Käsitle oma koodis alamprotsesse

Enamiku zombiprotsesside tekke põhjuseks on vanemprotsess, mis ei kutsu kunagi wait(). Parandage seda allikas:

  • C: Määrake signal(SIGCHLD, SIG_IGN); nii, et see viskaks alamprotsessi lõpetamisinfo automaatselt ära, või kasuta signaali käitlejat koos waitpid(-1, NULL, WNOHANG) asünkroonseks koristamiseks.
  • Python: Kasutage subprocess.run(), mis ootab automaatselt. Kui kasutad Popen, kutsu proc.wait() selgesõnaliselt.
  • Bash: Lisa wait taustatöid käivitavate skriptide lõppu.

Konfigureerige systemd õigesti

Systemd poolt hallatavate teenuste puhul takistavad need seaded zombide kogunemist:

  • KillMode=control-group tagab, et kõik alamprotsessid lõpetatakse üheaegselt, kui teenus peatub.
  • TimeoutStopSec annab vanemprotsessile aega tütarprotsesse koristada enne, kui systemd saadab SIGKILL-i.
  • WatchdogSec taaskäivitab automaatselt reageerimatuid teenuseid, tabades juhtumeid, kus vanemprotsess hangub ja lõpetab koristamise.

Jälgige oma protsessitabelit

Seadistage cron-ülesanne, mis käivitub iga 15 minuti järel, et loendada zombisid ja anda teada, kui nende arv ületab künnise:

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

Jälgige ka protsessitabeli kasutust, võrreldes praegust arvu /proc/sys/kernel/pid_max. Kui see ületab 80%, uurige olukorda enne, kui sellest saab probleem. Mõned ajutised zombid tavapärase töö käigus ei ole midagi murettekitavat. Kasvav arv, mis ei lange tagasi nullini, viitab rakenduse veale, mis vajab parandamist.

Kokkuvõte

Zombie-protsessid on surnud lapsed, mida pole ära koristatud. Nad ei kasuta CPU-d ega mälu, kuid hoiavad kinni PID-e, ja täis protsessitabel takistab teie serveril midagi kasulikku tegemast.

  • Leidke need ps aux | grep -w Z ja jälgige vanemprotsessi käsuga pstree.
  • Eemaldage need, saates SIGCHLD vanemprotsessile, teenuse taaskäivitamisega või viimase abinõuna vanemprotsessi lõpetamisega.
  • Vältige neid, kirjutades koodi, mis kutsub wait(), konfigureerides systemd õigesti ja jälgides oma protsessitabelit.

Kui teie töökoormus on suur ja vajate usaldusväärset infrastruktuuri täieliku root-juurdepääsuga, annavad FDC pühendatud serverid teile täieliku kontrolli protsesside haldamise ja süsteemi konfiguratsiooni üle.

Blogi

Sel nädalal esile tõstetud

Rohkem artikleid
Zombiprotsessid Linuxis: Leia, eemalda, takista

Zombiprotsessid Linuxis: Leia, eemalda, takista

Õppige, kuidas tuvastada, eemaldada ja vältida zombiprotsesse Linuxis. Käsklused, koodiparandused ja seire näpunäited serverite administraatoritele.

15 min lugemine - 19. mai 2026

Linuxi serveri karastamise kontrollnimekiri

15 min lugemine - 8. mai 2026

Rohkem artikleid
background image

Kas teil on küsimusi või vajate kohandatud lahendust?

icon

Paindlikud võimalused

icon

Ülemaailmne haare

icon

Kohene kasutuselevõtt

icon

Paindlikud võimalused

icon

Ülemaailmne haare

icon

Kohene kasutuselevõtt