- Linux Upravlja laganim procesima i nitima (LWP) na jedinstven način, s konfiguriranim ograničenjima u /proc i faktorima poput veličine stoga i memorije koji uvjetuju maksimalan broj niti.
- Naredbe Naredbe poput ps, top, htop i atop omogućuju vam popisivanje i praćenje procesa i LWP-ova, dok /proc i ps u načinu rada s nitima olakšavaju saznanje broja niti po procesu.
- Alati poput kill, pkill, nice, renice, strace, lsof, vmstat ili iostat koriste se za kontrolu, određivanje prioriteta i ispravljanje pogrešaka u procesima, optimizirajući ukupne performanse sustava.

Ako upravljate poslužiteljima ili često radite s Linuxom, prije ili kasnije morat ćete popisati procese, lagane niti (LWP) i pratiti njihovu potrošnju resursa . Poznavanje onoga što se izvodi, koliko resursa koristi i kako je svaki proces organiziran ključno je za otkrivanje uskih grla, prekida usluge ili neobičnog ponašanja sustava.
U sljedećim retcima pronaći ćete sveobuhvatan vodič koji objašnjava što su procesi i LWP-ovi, kako ih popisati, kako vidjeti njihova ograničenja i kako ih pratiti u stvarnom vremenu . Koristit ćemo klasične naredbe (ps, top, htop itd.) kao osnovu, kao i naprednije tehnike s /proc, dijagnostičkim alatima i postavkama prioriteta, a sve je objašnjeno na jasnom i jednostavnom španjolskom jeziku.
Procesi, niti i LWP-ovi u Linuxu: osnovni koncepti
U Linuxu, kada pokrenete program, stvara se proces, koji je instanca tog programa u memoriji , zajedno sa svim potrebnim resursima: kodom, podacima, deskriptorima datoteka, stogom itd. Svaki proces dobiva jedinstveni identifikator koji se naziva PID (Process ID), a to je broj koji zatim koristimo za njegovo praćenje ili prekid.
Uz "normalne" ili teške procese, kernel obrađuje takozvane lagane procese (LWP-ove) . LWP dijeli značajan dio resursa (kod, podatke, otvorene datoteke, signale itd.) s drugim nitima istog procesa, ali održava vlastiti stog i kontekst izvršavanja. Zbog toga je prebacivanje konteksta između niti mnogo jeftinije od prebacivanja između neovisnih procesa.
Jedna neobična značajka Linuxa je da interno ne pravi strogu razliku između procesa i niti : oba se upravljaju kao zadaci jezgre, a nit je u biti "proces" koji dijeli resurse s drugima. Ne postoje posebne strukture niti na razini jezgre kao u drugim operativnim sustavima , iako u praksi možemo koristiti LWP-ove za postizanje pravog paralelizma u višejezgrenim sustavima.
Ovaj paralelizam postiže se raspodjelom radnog opterećenja aplikacije na više niti. Svaki LWP može se izvoditi na drugoj jezgri procesora , što programu omogućuje korištenje svih dostupnih jezgri. Budući da je trošak stvaranja i prebacivanja LWP-ova nizak, Linux je vrlo učinkovit u pokretanju velikog broja niti, pod uvjetom da se poštuju sistemska ograničenja.
Ograničenja procesa i niti u Linuxu
Kao i kod svakog operativnog sustava, postoji maksimalan broj zadataka koje kernel može istovremeno obraditi. U Linuxu, ovi Granice procesa i niti su izložene kao parametri jezgre unutar pseudo-datotečnog sustava /proc, na ruti /proc/sys/kernel/.
Globalni limit niti koje kernel može podržati pohranjen je u datoteci /proc/sys/kernel/threads-maxAko provjerite sadržaj te datoteke pomoću cat o sysctlDobit ćete maksimalan broj LWP-ova koje sustav može stvoriti prije nego što odbije pokrenuti daljnje zadatke.
Ova je vrijednost obično prilično visoka na modernim poslužiteljima s više jezgri i puno RAM-a, dok na skromnijim strojevima ili malim virtualnim strojevima možete pronaći niže brojke. Ako se dosegne ovo ograničenje i nijedan se proces ne prekine, kernel neće moći stvarati nove procese ili niti, što može dovesti do pogrešaka prilikom pokretanja servisa ili naredbi.
Postoji još jedno važno ograničenje u /proc/sys/kernel/pid_maxOvo označava maksimalni ID procesa koji se može dodijeliti. Ova vrijednost u praksi također služi kao ograničenje broja procesa (i time niti) koji mogu koegzistirati, budući da Linux tretira oba na jedinstven način. Kada brojač PID-ova dosegne ovaj maksimum, ponovno počinje od dna i uobičajeno je vidjeti "ponavljane" PID-ove. el tiempoali pripadaju potpuno različitim procesima.
Izračunavanje maksimalnog broja niti i podešavanje stoga
Stvarni broj LWP-ova koje možete imati na Linux sustavu ne ovisi samo o tim parametrima kernela, već i o dostupnoj virtualnoj memoriji i veličini stoga svake niti . Uobičajeno korištena približna formula je:
maksimalan broj niti ≈ virtualna memorija / (veličina stoga × 1024 × 1024)
U tom izrazu, veličina stoga po niti se obično upituje naredbom ulimit -sOva vrijednost označava koliko je kilobajta memorije rezervirano za stog svakog LWP-a koji se stvara. Veća veličina stoga pruža veću zaštitu od prelijevanja, ali i Moći ćete imati manje istovremenih niti za istu količinu memorije.
Ako trebate pokrenuti aplikaciju s tisućama ili desecima tisuća niti, to bi moglo biti zanimljivo. smanjite veličinu stoga po niti koristeći ponovno ulimit (na primjer u skriptama čizma ili sistemske usluge), sve dok kod aplikacije ne zahtijeva ogromne stekove.
Ukratko, broj LWP-ova u Linuxu ograničen je parametrima kernela (threads-max, pid_max), veličinom stoga po niti i ukupnom dostupnom memorijom . Pažljivim podešavanjem ovih čimbenika možete skalirati broj istovremenih niti bez ugrožavanja stabilnosti sustava.
Osnovne naredbe za popisivanje procesa i LWP-ova
Za početak rada s procesima i nitima u Linuxu, klasični alat je naredba ps, što prikazuje status procesa To je snimka u vremenu (ne u stvarnom vremenu). Za razliku od grafičkog monitora, njegov izlaz je statičan: ako želite ažurirane informacije, jednostavno ga ponovno pokrenete.
s ps nema opcija Vidjet ćete samo procese povezane s trenutnom ljuskom. Za dobivanje svi sistemski procesiuključujući i one koji nemaju terminal povezano, uobičajena stvar za korištenje je:
ps aux
U tom izlazu vidjet ćete, između ostalih podataka, vlasnika korisnika, PID, postotak korištenog CPU-a i RAM-a, vrijeme izvršavanja i naredbu korištenu za pokretanje svakog procesa. To je puno informacija, ali je ključno za lociranje zadataka koji troše puno resursa računala.
Neke korisne kombinacije ps Za veću kontrolu nad onim što se pojavljuje, koristi se sljedeće:
ps -eops -A: navodi sve aktivne procese u generičkom formatu UNIX.ps -u nombre_usuario: prikazuje samo procese određenog korisnika.ps -axjf: prikazuje izlaz u hijerarhijskom formatu, ugniježđujući podređene procese pod njihove roditelje.ps -C nombre_proceso: filtrira po nazivu naredbe i uključuje povezane podprocese.
Druga uobičajena opcija je korištenje ps aux | grep patrón zadržati samo procese koji sadrže taj tekst, na primjer web daemon, mehanizam baze podataka ili rukopis Točnije, to je vrlo praktičan način da na prvi pogled pronađete ono što tražite, a da se ne izgubite u stranicama i stranicama rezultata.
Praćenje u stvarnom vremenu s top i htop
Kada trebate vidjeti kako se procesi mijenjaju u stvarnom vremenu, naredba zvijezda je top, koji prikazuje dinamički monitor aktivnosti sustava. Za razliku od psIzlaz se kontinuirano ažurira, prikazujući korištenje CPU-a, korištenje memorije, prosječno opterećenje, broj aktivnih zadataka i uređeni popis procesa.
Jednostavnim trčanjem topVidjet ćete procese poredane prema korištenju CPU-a. Možete preurediti po drugim poljima, filtrirati, ukinuti procese ili promijeniti prioritete pritiskom različitih tipki unutar samog sučelja (kombinacije se mogu malo razlikovati ovisno o verziji, ali su obično naznačene na dnu).
Tipičan način fokusiranja na najteže procese je korištenje naredbe poput:
top -o %CPU
Na ovaj način procese koji najviše troše CPU stavljate na vrh , što je vrlo korisno kada nešto počne povećavati korištenje procesora i želite brzo pronaći krivca.
Ako više volite nešto vizualno, možete instalirati htop, poboljšana verzija top-a s interaktivnim sučeljemTrake boja i navigacija tipkovnicom i mišem. Na mnogim distribucijama prvo ćete ga morati instalirati pomoću upravitelja paketa, na primjer:
sudo apt-get install htop
Nakon instalacije, pokrećete htop i imat ćete prikaz opterećenja po jezgri, memoriji, swapu i tablici procesa u bojama gdje možete Pomičite se okomito i vodoravno, filtrirajte po korisniku, mijenjajte prioritete ili prekidajte procese bez ručnog upisivanja PID-a..
Praćenje resursa s atopom
Za detaljniju analizu performansi, posebno na poslužiteljima, postoji alat atop, koji bilježi i prikazuje aktivnost svih procesa s visokom razinom detalja. To je uslužni program u tekstualnom načinu rada preko cijelog zaslona koji se fokusira na evoluciju opterećenja i korištenja resursa tijekom vremena.
Kada bacaš atopVidjet ćete statistiku od CPU, memorija, swap, diskovi i mreža koji se obično osvježava svakih 10 sekundi. Nadalje, može ostati aktivan u pozadini danima, spremajući povijest koju kasnije možete pregledati kako biste analizirali problem koji se dogodio u prošlosti.
Među njegovim prednostima su mogućnost grupiranja potrošnje po korisniku ili nazivu procesa , označavanje crvenom bojom kritičnih resursa koji su pri kraju, prikaz procesa koji su već završeni, ali su još uvijek relevantni u zapisniku, te praćenje unutarnjih niti (LWP) unutar svakog procesa.
U mnogim distribucijama se instalira s određenim paketima ; na primjer:
sudo apt install atop
sudo dnf install atop
Nakon instalacije, jednostavno pokrenite atop početi vidjeti na razini procesa potrošnju CPU-a, memorije, diska i mreže, te tako moći s priličnom točnošću otkriti koja komponenta preopterećuje sustav.
Kako pregledati broj niti (LWP-ova) po procesu
Ako vas zanima koliko Lagane pređe imaju specifičan proces.Linux nudi nekoliko načina za dobivanje ovih informacija. Prvi uključuje pregled pseudo-datotečnog sustava. /proc, gdje kernel otkriva interne podatke za svaki zadatak.
Unutar /proc/<PID>/ pronaći ćete datoteku status, što uključuje polje NitiČitanjem te datoteke možete brzo vidjeti koliko je LWP-ova proces s tim određenim PID-om stvorio, zajedno s mnogim drugim detaljima kao što su status, potrošnja memorije i mogućnosti.
Drugi način korištenja /proc Radi se o pregledu sadržaja direktorija /proc/<PID>/task/U ovom putu, kernel stvara poddirektorij za svaku nit koja pripada procesu. Dakle, broj direktorija unutar task odgovara broju niti. Možeš koristiti ls u kombinaciji s wc da se brojanje izvrši automatski.
Uz pristup s /proc, sama naredba ps može vratiti informacije na razini nitiKorištenje opcije -H ulazite u "način rada s nitima" i s -p Filtrirate prema određenom PID-u. Ako dodate -h Izbjegavate rtove, što olakšava usmjeravanje toka prema wc i dobiti broj redaka, odnosno broj LWP-ova navedenih za taj proces.
U svim ovim metodama, ako ih primijenite na isti PID, broj niti mora se podudarati: polje Niti od status, broj poddirektorija u task i početne linije ps U načinu rada s nitima trebali bi dati istu brojku, osim malih varijacija ako proces u tom točnom trenutku stvara ili uništava niti.
Filtriranje i pretraživanje procesa pomoću pgrep i grep
Kada se na računalu izvode stotine ili tisuće procesa, pronalaženje onog koji vas zanima pomicanjem je gubljenje vremena. Tu to dobro dođe. pgrep, koji pretražuje procese po imenu ili uzorku i izravno vraća odgovarajuće PID-ove.
S jednostavnim pgrep apache Na zaslonu ćete vidjeti identifikatore svih procesa čiji naziv sadrži taj tekst. A ako trebate dodatno precizirati pretraživanje, možete kombinirajte pgrep s korisničkim filterimaNa primjer, s opcijom -u ograničiti pretraživanje na procese određenog računa.
Druga često korištena taktika je oslanjanje na grep filtrirati izlaz od psTipična naredba bi mogla biti ps aux | grep apache, koji će vam prikazati samo linije procesa koje sadrže riječ "apache", zajedno s njihovim PID-ovima, resursima i potpunim naredbama.
Imajte na umu da ova vrsta cjevovoda dodaje dodatne procese (kao što je sam onaj) grep ili wc) na popis, pa kada radite stvari poput ps r | wc -l Brojač se povećava za redak zaglavlja i za procese koji su dio samog cjevovoda. Važno je ispravno interpretirati ove rezultate kako bi se izbjegla iznenađenja s ukupnim brojem zadataka.
Općenito, savladavanje naredbi ps + grep, pgrep i opcija filtriranja omogućuje vam da se usredotočite na ono što vas zanima bez da vas preopterećuju sistemski procesi koje većinu vremena možete zanemariti u prvoj analizi.
Kontrola i dovršetak procesa
Popisivanje i praćenje procesa je odlično, ali često vam je potrebno prekinuti problematične zadatke ili pratiti njihov status kako biste oslobodili resurse ili vratili stabilnost sustava. Linux nudi nekoliko jednostavnih alata za to.
Najpoznatiji je kill, koji šalje signale procesima identificiranim njihovim PID-omAko ne odredite signal, šalje se SIGTERM kojim se od procesa traži da se na uredan način završi. Ako se proces opire, možete koristiti SIGKILL signal (opcija -9), što prisiljava proces da se odmah završi bez davanja mogućnosti brisanja resursa.
Kada ne želite prikupljati PID-ove jedan po jedan, imate pkill y killall, koji posluju pod nazivom. S pkill firefox Ubit ćete sve procese čije ime odgovara "firefox" za vašeg korisnika, dok killall Obično je agresivniji i može utjecati na sve instance programa na sustavu, uključujući i one drugih korisnika, ovisno o dopuštenjima.
Također je vrlo korisno razumjeti kako funkcioniraju fg y bg igranje s procesima u prvom planu i u pozadiniPrilikom obustave zadatka pomoću Ctrl+Z, a zatim korištenja bgŠaljete ga u pozadinu kako bi nastavio raditi dok oporavljate terminal. Ako zatim ponovno trebate komunicirati s njim, fg vraća je u središte pozornosti.
Konačno, kada želite pokrenuti nešto što nastavlja raditi čak i nakon što se odjavite, možete kombinirati nohup sa slanjem u pozadinu, na primjer nohup script.sh &Na ovaj način, proces se neće prekinuti čak ni ako zatvorite terminal ili se veza prekine. SSHOvo je vrlo korisno za dugotrajne zadatke. Ako ih radije planirate, pogledajte kako rasporediti zadatke s cronom i na.
Postavljanje prioriteta s lijepom i renice
U višekorisničkim sustavima ili sustavima s mnogo istovremenih zadataka, nije dovoljno znati koliko procesa ili LWP-ova postoji; također je važno znati koliko procesa ili LWP-ova postoji. odlučiti kojim se procesima daje prioritet u korištenju CPU-aTu na scenu stupaju naredbe. nice y renice.
Kada započnete proces s nice -n valor comando Postavljate njegov relativni prioritet. Tipični raspon je od -20 (najviši prioritet) do 19 (najniži prioritet), pri čemu je 0 zadana vrijednost. Viša vrijednost za nice znači da će proces biti obzirniji i ustupiti vrijeme procesora drugima prilikom natjecanja za resurse.
Na primjer, ako imate skriptu koja intenzivno koristi resurse i nije hitna, ali želite da se izvršava u pozadini bez ometanja, možete je pokrenuti pomoću nice -n 10 ./script.shTo mu dodjeljuje nizak prioritet kako ne bi monopolizirao procesor dok drugi interaktivni procesi rade.
Ako umjesto podešavanja prioriteta pri pokretanju trebate promijeniti prioritet procesa koji je već u tijeku, ti koristiš reniceS nečim poput renice -n 5 -p PID S tim PID-om mijenjate lijepu vrijednost procesa, prilagođavajući ga trenutnim potrebama (povećavajući ili snižavajući mu prioritet).
Pravilno upravljanje prioritetima pomoću nice i renice pomaže u sprječavanju da jedan proces ili skup niti preoptereti odziv sustava, posebno na dijeljenim poslužiteljima ili produkcijskim okruženjima s mnogo istovremenih učitavanja.
Napredni alati za otklanjanje pogrešaka i analizu procesa
Kada se proces ili jedan od njegovih LWP-ova ponaša čudno, ruši se ili se čini da zamrzava sustav, često je potrebno aktivirati naprednije dijagnostičke alate. Jedan od najmoćnijih je stracešto vam omogućuje praćenje sistemskih poziva koje proces izvršava u stvarnom vremenu. Za dublje greške kernela postoji vodič o koristite crash i kdump.
S naredbom poput strace -p PID možete uključiti se u proces koji je već u tijeku i vidjeti koje sistemske pozive izvršava (čitanje datoteka, pisanje, mrežne operacije, signali itd.). Ovo je posebno korisno za otkrivanje zašto proces čeka "nešto": možda je blokiran pri pokušaju otvaranja datoteke koja ne postoji, čeka na socket ili je zaglavljen s nedovoljnim dozvolama.
Još jedan klasični dijagnostički alat je lsof (Popis otvorenih datoteka)Ovaj alat prikazuje datoteke koje je otvorio svaki proces, uključujući datoteke na disku, mrežne utičnice, uređaje i još mnogo toga. Vrlo je koristan za otkrivanje koji proces zauzima određeni port, koja usluga zaključava datoteku ili koji zadaci čitaju određeni zapisnik.
Dopunjavanje lsof-a, fuser Govori vam koji procesi koriste datoteku ili port. Točnije, na primjer, pomoću naredbe na TCP portu možete brzo saznati koji daemon sluša na tom broju i djelovati u skladu s tim, bilo rekonfiguracijom ili zaustavljanjem.
Da biste analizu performansi podigli korak dalje, imate pidstatkoji nudi detaljne statistike CPU-a, memorije i I/O-a po procesu, i s watchšto vam omogućuje periodično izvršavanje naredbi kao što su ps -e o netstat promatrati na ekranu kako se procesi ili veze razvijaju tijekom vremena.
Upravljanje uslugama i cjelokupno stanje sustava
Mnogi važni procesi u Linuxu su zapravo usluge ili demoni koji se izvode u pozadini, kao što su web poslužitelji, baza podataka ili planere zadataka. U modernim sustavima sa systemd-om, središnji alat za upravljanje tim uslugama je systemctl.
s systemctl start nombre_servicio Možete pokrenuti uslugu, dok systemctl stop, restart y status Omogućuju vam da ga zaustavite, ponovno pokrenete ili pregledate njegov trenutni status. Također možete omogućiti ili onemogućiti njegovo automatsko pokretanje pri pokretanju sustava, što izravno utječe na to koji će se procesi pojaviti na popisu nakon ponovnog pokretanja.
U starijim distribucijama ili konfiguracijama koje još uvijek koriste SysVinit, uobičajeno je pronaći naredbu service za upravljanje uslugama. Iako ga je u mnogim slučajevima zamijenio systemd, još uvijek je koristan kao sloj kompatibilnosti za pokretanje, zaustavljanje ili ponovno pokretanje određenih demona.
Osim usluga, vrijedi ih imati globalni pogled na stanje sustava. Zapovijed uptime Prikazuje koliko dugo je stroj uključen, koliko je korisnika spojeno i nedavno prosječno opterećenje, dajući brzu ideju o tome je li sustav ugodan ili preopterećen.
Za detaljniju analizu performansi, vmstat Pruža statistiku o CPU-u, memoriji, procesima i swapu.Dok iostat Fokusira se na I/O operacije s diska, prikazujući vrijeme čitanja, pisanja i odziva uređaja. skladištenjeOvi alati su neprocjenjivi za otkrivanje potječu li problemi iz CPU-a, RAM-a, diska ili kombinacije svega toga.
Kombiniranjem svega navedenog - popisivanja procesa i LWP-ova s ps i /proc, praćenja u stvarnom vremenu s top, htop ili atop, filtriranja s pgrep, kontrole s kill i podešavanja s nice, zajedno s dijagnostičkim alatima kao što su strace i lsof - moguće je vrlo precizno razumjeti i kontrolirati što se događa na Linux sustavu u bilo kojem trenutku, identificirati problematične procese i niti te održavati performanse pod kontrolom čak i u zahtjevnim okruženjima.
Strastveni pisac o svijetu bajtova i tehnologije općenito. Volim dijeliti svoje znanje pisanjem, a to je ono što ću učiniti na ovom blogu, pokazati vam sve najzanimljivije stvari o gadgetima, softveru, hardveru, tehnološkim trendovima i još mnogo toga. Moj cilj je pomoći vam da se snađete u digitalnom svijetu na jednostavan i zabavan način.