- Linux Spravuje ľahké procesy a vlákna (LWP) jednotným spôsobom s konfigurovateľnými limitmi v /proc a faktormi, ako je veľkosť zásobníka a pamäť, ktoré podmieňujú maximálny počet vlákien.
- príkazy Príkazy ako ps, top, htop a atop vám umožňujú zobraziť a monitorovať procesy a LWP, zatiaľ čo /proc a ps v režime vlákien uľahčujú zistenie počtu vlákien na proces.
- Nástroje ako kill, pkill, nice, renice, strace, lsof, vmstat alebo iostat sa používajú na riadenie, prioritizáciu a ladenie procesov, čím sa optimalizuje celkový výkon systému.

Ak spravujete servery alebo často pracujete s Linuxom, skôr či neskôr budete musieť vymenovať procesy, ľahké vlákna (LWP) a monitorovať ich spotrebu zdrojov . Vedieť, čo beží, koľko zdrojov to používa a ako je každý proces organizovaný, je kľúčom k odhaleniu úzkych miest, výpadkov služieb alebo nezvyčajného správania systému.
V nasledujúcich riadkoch nájdete komplexného sprievodcu, ktorý vysvetľuje, čo sú procesy a LWP, ako ich zobraziť, ako zobraziť ich limity a ako ich monitorovať v reálnom čase . Ako základ použijeme klasické príkazy (ps, top, htop atď.), ako aj pokročilejšie techniky s /proc, diagnostické nástroje a nastavenia priorít, všetko vysvetlené jasnou a priamočiarou španielčinou.
Procesy, vlákna a LWP v Linuxe: základné pojmy
V systéme Linux sa pri spustení programu vytvorí proces, čo je inštancia daného programu v pamäti spolu so všetkými potrebnými zdrojmi: kód, dáta, deskriptory súborov, zásobník atď. Každý proces dostane jedinečný identifikátor nazývaný PID (Process ID), čo je číslo, ktoré potom používame na jeho monitorovanie alebo ukončenie.
Okrem „normálnych“ alebo ťažkých procesov jadro spracováva aj tzv. ľahké procesy (LWP) . LWP zdieľa významnú časť zdrojov (kód, dáta, otvorené súbory, signály atď.) s inými vláknami toho istého procesu, ale zachováva si vlastný zásobník a kontext vykonávania. Vďaka tomu je prepínanie kontextu medzi vláknami oveľa lacnejšie ako prepínanie medzi nezávislými procesmi.
Jednou zvláštnou vlastnosťou Linuxu je, že interne striktne nerozlišuje medzi procesom a vláknom : obe sú spravované ako úlohy jadra a vlákno je v podstate „proces“, ktorý zdieľa zdroje s ostatnými. Neexistujú žiadne špeciálne štruktúry vlákien na úrovni jadra ako v iných operačných systémoch , hoci v praxi môžeme použiť LWP na dosiahnutie skutočného paralelizmu vo viacjadrových systémoch.
Táto paralelita sa dosahuje rozdelením pracovnej záťaže aplikácie medzi viacero vlákien. Každé LWP môže bežať na inom jadre procesora , čo umožňuje programu využívať všetky dostupné jadrá. Keďže náklady na vytváranie a prepínanie LWP sú nízke, Linux je veľmi efektívny pri spúšťaní veľkého počtu vlákien, za predpokladu, že sa rešpektujú systémové limity.
Obmedzenia procesov a vlákien v Linuxe
Rovnako ako v každom operačnom systéme, existuje maximálny počet úloh, ktoré dokáže jadro spracovať súčasne. V Linuxe tieto Hranice procesov a vlákien sú zobrazené ako parametre jadra v rámci pseudo-súborového systému /proc, na trase /proc/sys/kernel/.
Globálny limit vlákien, ktoré jadro dokáže podporovať, je uložený v súbore /proc/sys/kernel/threads-maxAk skontrolujete obsah tohto súboru pomocou cat o sysctlZískate maximálny počet LWP, ktoré systém dokáže vytvoriť, predtým ako odmietne spustiť ďalšie úlohy.
Táto hodnota je zvyčajne dosť vysoká na moderných serveroch s viacerými jadrami a veľkým množstvom pamäte RAM, zatiaľ čo na skromnejších počítačoch alebo malých virtuálnych počítačoch sa môžu vyskytnúť nižšie čísla. Ak sa tento limit dosiahne a žiadne procesy sa neukončia, jadro nebude môcť vytvárať nové procesy ani vlákna, čo môže viesť k chybám pri spúšťaní služieb alebo príkazov.
Existuje ešte jedno dôležité obmedzenie v /proc/sys/kernel/pid_maxToto označuje maximálne ID procesu, ktoré je možné priradiť. Táto hodnota v praxi slúži aj ako limit pre počet procesov (a v širšom zmysle aj vlákien), ktoré môžu koexistovať, pretože Linux s oboma zaobchádza jednotným spôsobom. Keď počítadlo PID dosiahne toto maximum, začne odznova od dna a je bežné vidieť „opakujúce sa“ PID. časale patria k úplne iným procesom.
Výpočet maximálneho počtu vlákien a úprava zásobníka
Skutočný počet LWP, ktoré môžete mať na systéme Linux, závisí nielen od parametrov jadra, ale aj od dostupnej virtuálnej pamäte a veľkosti zásobníka každého vlákna . Bežne používaný približný vzorec je:
maximálny počet vlákien ≈ virtuálna pamäť / (veľkosť zásobníka × 1024 × 1024)
V tomto výraze sa veľkosť zásobníka na vlákno zvyčajne dotazuje pomocou príkazu ulimit -sTáto hodnota udáva, koľko kilobajtov pamäte je rezervovaných pre zásobník každého vytvoreného LWP. Väčšia veľkosť zásobníka poskytuje väčšiu ochranu pred pretečením, ale aj Budete môcť mať menej simultánnych vlákien pre rovnaké množstvo pamäte.
Ak potrebujete spustiť aplikáciu s tisíckami alebo desiatkami tisíc vlákien, mohlo by to byť zaujímavé. zmenšite veľkosť zásobníka na vlákno pomocou znova ulimit (napríklad v skriptoch topánka alebo systémové služby), pokiaľ kód aplikácie nevyžaduje obrovské zásobníky.
Stručne povedané, počet LWP v Linuxe je obmedzený parametrami jadra (threads-max, pid_max), veľkosťou zásobníka na vlákno a celkovou dostupnou pamäťou . Starostlivým nastavením týchto faktorov môžete škálovať počet súbežných vlákien bez ohrozenia stability systému.
Základné príkazy pre výpis procesov a LWP
Na začatie práce s procesmi a vláknami v systéme Linux je klasickým nástrojom príkaz ps, ktorý zobrazuje stav procesov Je to snímka v čase (nie v reálnom čase). Na rozdiel od grafického monitora je jeho výstup statický: ak chcete aktualizované informácie, jednoducho ho reštartujete.
s ps žiadne možnosti Uvidíte iba procesy prepojené s aktuálnym shellom. Ak chcete získať všetky systémové procesyvrátane tých, ktorí nemajú terminál súvisiace, bežné použitie je:
ps aux
V tomto výstupe uvidíte okrem iných údajov vlastníka, PID, percento využitia CPU a RAM, čas vykonávania a príkaz použitý na spustenie každého procesu. Je to veľa informácií, ale sú nevyhnutné na lokalizáciu úloh, ktoré spotrebúvajú veľa zdrojov počítača.
Niekoľko užitočných kombinácií ps Pre lepšiu kontrolu nad tým, čo sa zobrazuje, sa používajú nasledujúce prvky:
ps -eops -A: zobrazuje všetky aktívne procesy vo všeobecnom formáte UNIX.ps -u nombre_usuario: zobrazuje iba procesy konkrétneho používateľa.ps -axjf: zobrazuje výstup v hierarchickom formáte, pričom podradené procesy sú vnorené pod ich rodičovské procesy.ps -C nombre_proceso: filtruje podľa názvu príkazu a zahŕňa pridružené podprocesy.
Ďalšou bežnou možnosťou je použitie ps aux | grep patrón zachovať iba procesy, ktoré obsahujú daný text, napríklad webový démon, databázový engine alebo scenár Konkrétne je to veľmi pohodlný spôsob, ako nájsť to, čo hľadáte, na prvý pohľad bez toho, aby ste sa stratili na stránkach a stránkach výsledkov.
Monitorovanie v reálnom čase pomocou funkcií top a htop
Keď potrebujete vidieť, ako sa procesy menia v reálnom čase, použite príkaz hviezdička top, ktorý zobrazuje dynamický monitor aktivity systému. Na rozdiel od psVýstup sa priebežne aktualizuje a zobrazuje využitie CPU, využitie pamäte, priemerné zaťaženie, počet aktívnych úloh a zoradený zoznam procesov.
Jednoduchým behom topZobrazia sa procesy zoradené podľa využitia CPU. Môžete zmeniť poradie podľa iných polí, filtrovať, ukončiť procesy alebo zmeniť priority stlačením rôznych klávesov v samotnom rozhraní (kombinácie sa môžu mierne líšiť v závislosti od verzie, ale zvyčajne sú uvedené v dolnej časti).
Typický spôsob, ako sa zamerať na najťažšie procesy, je použiť príkaz ako:
top -o %CPU
Týmto spôsobom umiestnite procesy, ktoré spotrebúvajú najviac CPU , na začiatok , čo je veľmi užitočné, keď niečo začne prudko zvyšovať využitie procesora a chcete rýchlo nájsť vinníka.
Ak uprednostňujete niečo vizuálnejšie, môžete si nainštalovať htop, vylepšená verzia top s interaktívnym rozhranímFarebné pruhy a navigácia pomocou klávesnice a myši. V mnohých distribúciách ho budete musieť najprv nainštalovať pomocou správcu balíkov, napríklad:
sudo apt-get install htop
Po nainštalovaní spustíte htop a budete mať farebne odlíšené zobrazenie zaťaženia na jadro, pamäť, swap a tabuľku procesov, kde môžete Posúvajte sa vertikálne a horizontálne, filtrujte podľa používateľa, zmeňte priority alebo ukončujte procesy bez manuálneho zadávania PID..
Monitorovanie zdrojov pomocou atopu
Pre podrobnejšiu analýzu výkonu, najmä na serveroch, je k dispozícii nástroj atop, ktorý zaznamenáva a zobrazuje aktivitu všetkých procesov s vysokou úrovňou detailov. Je to celoobrazovkový textový nástroj, ktorý sa zameriava na vývoj záťaže a využívania zdrojov v priebehu času.
Keď hodíš atopUvidíte štatistiky CPU, pamäť, swap, disky a sieť ktoré sa zvyčajne obnovujú každých 10 sekúnd. Okrem toho môže zostať aktívne na pozadí niekoľko dní a ukladať históriu, ktorú si môžete neskôr prezrieť a analyzovať problém, ktorý sa vyskytol v minulosti.
Medzi jeho výhody patrí možnosť zoskupiť spotrebu podľa používateľa alebo podľa názvu procesu , zvýrazniť červenou farbou kritické zdroje, ktoré sú nedostatočné, zobraziť procesy, ktoré už boli dokončené, ale stále sú relevantné v protokole, a monitorovať interné vlákna (LWP) v rámci každého procesu.
V mnohých distribúciách sa inštaluje so špecifickými balíkmi , napríklad:
sudo apt install atop
sudo dnf install atop
Po inštalácii stačí spustiť atop začať na úrovni procesov vidieť spotrebu CPU, pamäte, disku a siete, a tak byť schopný s značnou presnosťou zistiť, ktorá súčasť systém zahlcuje.
Ako zobraziť počet vlákien (LWP) na proces
Ak vás zaujíma, koľko Ľahké priadze majú špecifický proces.Linux ponúka niekoľko spôsobov, ako získať tieto informácie. Prvým je kontrola pseudosúborového systému. /proc, kde jadro sprístupňuje interné dáta pre každú úlohu.
vnútri /proc/<PID>/ nájdeš súbor status, ktoré zahŕňa pole VláknaPrečítaním tohto súboru môžete rýchlo zistiť, koľko LWP proces s daným PID vytvoril, spolu s mnohými ďalšími podrobnosťami, ako je stav, spotreba pamäte a možnosti.
Ďalší spôsob použitia /proc Ide o pohľad na obsah adresára /proc/<PID>/task/V tejto ceste jadro vytvorí podadresár pre každé vlákno patriace procesu. Takže počet adresárov v rámci task zodpovedá počtu vlákien. Môžeš použiť ls v kombinácii s wc aby sa počítanie vykonalo automaticky.
Okrem prístupu s /proc, samotný príkaz ps môže vrátiť informácie na úrovni vláknaPoužitie možnosti -H vstúpite do „vláknového režimu“ a pomocou -p Filtrujete podľa konkrétneho PID. Ak pridáte -h Vyhýbate sa úbočiam, čo uľahčuje smerovanie toku smerom k wc a získať počet riadkov, teda počet LWP uvedených pre daný proces.
Vo všetkých týchto metódach, ak ich aplikujete na rovnaký PID, počet vlákien sa musí zhodovať: pole Vlákna status, počet podadresárov v task a štartovacie čiary ps V režime vlákna by mali uviesť rovnaké číslo, s výnimkou malých odchýlok, ak proces v danom okamihu vytvára alebo ničí vlákna.
Filtrovanie a vyhľadávanie procesov pomocou pgrep a grep
Keď na počítači bežia stovky alebo tisíce procesov, nájdenie toho, ktorý vás zaujíma, rolovaním je strata času. A práve tu sa to hodí. pgrep, ktorý vyhľadáva procesy podľa názvu alebo vzoru a priamo vráti zodpovedajúce PID.
S jednoduchým pgrep apache Na obrazovke uvidíte identifikátory všetkých procesov, ktorých názov obsahuje daný text. A ak potrebujete svoje vyhľadávanie ďalej spresniť, môžete kombinovať pgrep s používateľskými filtramiNapríklad s možnosťou -u obmedziť vyhľadávanie na procesy konkrétneho účtu.
Ďalšou bežne používanou taktikou je spoliehať sa na grep filtrovať výstup z psTypický príkaz môže byť ps aux | grep apache, ktorý vám zobrazí iba riadky procesu obsahujúce slovo „apache“ spolu s ich PID, zdrojmi a úplnými príkazmi.
Majte na pamäti, že tento typ potrubia pridáva ďalšie procesy (napríklad samotný) grep alebo wc) do zoznamu, takže keď robíte veci ako ps r | wc -l Počítadlo sa zvyšuje o riadok hlavičky a o procesy, ktoré sú súčasťou samotného kanála. Je dôležité správne interpretovať tieto výsledky, aby sa predišlo prekvapeniam s celkovým počtom úloh.
Vo všeobecnosti vám zvládnutie ps + grep, pgrep a možností filtrovania umožňuje sústrediť sa na to, čo vás zaujíma, bez toho, aby ste boli zahltení systémovými procesmi, ktoré môžete väčšinou pri prvej analýze ignorovať.
Riadenie a dokončovanie procesov
Zoznamovanie a monitorovanie procesov je skvelé, ale často potrebujete ukončiť problematické úlohy alebo monitorovať ich stav, aby ste uvoľnili zdroje alebo obnovili stabilitu systému. Linux na to ponúka niekoľko jednoduchých nástrojov.
Najznámejší je kill, ktorý posiela signály procesom identifikovaným ich PIDAk nezadáte signál, odošle sa SIGTERM so žiadosťou o riadené ukončenie procesu. Ak proces odoláva, môžete použiť signál SIGKILL (voľba -9), čo vynúti okamžité ukončenie procesu bez možnosti vymazať zdroje.
Ak nechcete zbierať PID jeden po druhom, máte pkill y killall, ktoré fungujú pod názvom. S pkill firefox Ukončíte všetky procesy, ktorých názov sa zhoduje s názvom „firefox“ pre vášho používateľa, zatiaľ čo killall Má tendenciu byť agresívnejší a môže ovplyvniť všetky inštancie programu v systéme vrátane inštancií iných používateľov v závislosti od povolení.
Je tiež veľmi užitočné pochopiť, ako fungujú fg y bg hrať sa s procesmi v popredí a na pozadíPri pozastavení úlohy pomocou Ctrl+Z a následnom použití bgPošlete ho na pozadie, aby pokračoval v prevádzke, kým obnovíte terminál. Ak s ním potom budete potrebovať znova interagovať, fg ju opäť dostane do centra pozornosti.
Nakoniec, ak chcete spustiť niečo, čo beží aj po odhlásení, môžete to skombinovať nohup s odosielaním na pozadienapríklad nohup script.sh &Týmto spôsobom sa proces nepreruší, ani ak zatvoríte terminál alebo sa stratí pripojenie. SSHToto je veľmi užitočné pre dlhodobé úlohy. Ak si to radšej naplánujete, pozrite si ako plánovať úlohy s cronom a na.
Stanovenie priorít s pekným a úprimným prístupom
V systémoch s viacerými používateľmi alebo systémoch s mnohými súbežnými úlohami nestačí vedieť, koľko procesov alebo LWP existuje; je tiež dôležité vedieť, koľko procesov alebo LWP existuje. určiť, ktoré procesy majú prioritu pri využívaní CPUTu prichádzajú na rad príkazy. nice y renice.
Keď začnete proces s nice -n valor comando Nastavujete jeho relatívnu prioritu. Typický rozsah je od -20 (najvyššia priorita) do 19 (najnižšia priorita), pričom 0 je predvolená hodnota. Vyššia hodnota funkcie nice znamená, že proces bude ohľaduplnejší a pri súťaži o zdroje uvoľní čas CPU ostatným.
Napríklad, ak máte skript náročný na zdroje, ktorý nie je urgentný, ale chcete, aby bežal na pozadí bez prekážok, môžete ho spustiť pomocou nice -n 10 ./script.shToto mu priradí nízku prioritu, aby nemonopolizoval procesor, kým bežia iné interaktívne procesy.
Ak namiesto úpravy priority pri spustení potrebujete zmeniť prioritu už prebiehajúceho procesu, používaš reniceS niečím ako renice -n 5 -p PID Pomocou tohto PID meníte hodnotu nice procesu a prispôsobíte ju aktuálnym potrebám (zvýšite alebo znížite jej prioritu).
Správna správa priorít pomocou funkcií nice a renice pomáha predchádzať tomu, aby jeden proces alebo sada vlákien zahltila systémovú odozvu, najmä na zdieľaných serveroch alebo v produkčných prostrediach s mnohými simultánnymi záťažami.
Pokročilé nástroje na ladenie a analýzu procesov
Keď sa proces alebo jeden z jeho LWP správa zvláštne, zlyháva alebo sa zdá, že systém zamrzne, je často potrebné použiť pokročilejšie diagnostické nástroje. Jedným z najvýkonnejších je stracečo vám umožňuje v reálnom čase monitorovať systémové volania vykonávané procesom. Pre hlbšie chyby jadra existuje sprievodca na použiť crash a kdump.
S príkazom ako strace -p PID môžete zapojiť sa do procesu, ktorý už prebieha a zistiť, aké systémové volania vykonáva (čítanie súborov, zápis, sieťové operácie, signály atď.). Toto je obzvlášť užitočné na zistenie, prečo proces čaká na „niečo“: možno je zablokovaný pri pokuse o otvorenie súboru, ktorý neexistuje, čaká na socket alebo má nedostatočné oprávnenia.
Ďalším klasickým diagnostickým nástrojom je lsof (Zoznam otvorených súborov)Tento nástroj zobrazuje súbory otvorené jednotlivými procesmi vrátane súborov na disku, sieťových soketov, zariadení a ďalších. Je veľmi užitočný na zistenie, ktorý proces obsadzuje konkrétny port, ktorá služba uzamyká súbor alebo ktoré úlohy čítajú konkrétny protokol.
Doplnenie lsof, fuser Hovorí vám, ktoré procesy používajú súbor alebo port. Konkrétne napríklad pomocou príkazu na TCP porte môžete rýchlo zistiť, ktorý démon počúva na danom čísle, a podľa toho konať, buď jeho prekonfigurovaním, alebo jeho zastavením.
Ak chcete posunúť analýzu výkonnosti o krok ďalej, musíte pidstatktorý ponúka podrobné štatistiky CPU, pamäte a I/O na proces a s watchčo vám umožňuje pravidelne vykonávať príkazy ako napríklad ps -e o netstat sledovať na obrazovke, ako sa procesy alebo prepojenia vyvíjajú v priebehu času.
Správa služieb a celkový stav systému
Mnohé dôležité procesy v Linuxe sú v skutočnosti služby alebo démony, ktoré bežia na pozadí, ako napríklad webové servery, databázy alebo plánovače úloh. V moderných systémoch so systemd je ústredným nástrojom na správu týchto služieb systemctl.
s systemctl start nombre_servicio Službu môžete spustiť, zatiaľ čo systemctl stop, restart y status Umožňujú vám ho zastaviť, reštartovať alebo zobraziť jeho aktuálny stav. Môžete tiež povoliť alebo zakázať jeho automatické spustenie pri zavedení systému, čo priamo ovplyvňuje, ktoré procesy sa zobrazia v zozname po reštarte.
V starších distribúciách alebo konfiguráciách, ktoré stále používajú SysVinit, je bežné nájsť príkaz service na správu služieb. Hoci ho v mnohých prípadoch nahradila platforma systemd, stále je užitočná ako vrstva kompatibility na spúšťanie, zastavovanie alebo reštartovanie špecifických démonov.
Okrem služieb sa oplatí mať globálny pohľad na stav systému. Príkaz uptime Zobrazuje, ako dlho je zariadenie zapnuté, koľko používateľov je pripojených a nedávne priemerné zaťaženie, čo poskytuje rýchlu predstavu o tom, či je systém v pohode alebo preťažený.
Pre podrobnejšiu analýzu výkonnosti, vmstat Poskytuje štatistiky o CPU, pamäti, procesoch a swape.Kým iostat Zameriava sa na diskové I/O operácie, zobrazuje časy čítania, zápisu a odozvy zariadení. skladovanieTieto nástroje sú neoceniteľné na zistenie, či problémy pochádzajú z CPU, RAM, disku alebo z ich kombinácie.
Kombináciou všetkých vyššie uvedených možností – výpisu procesov a LWP pomocou ps a /proc, monitorovania v reálnom čase pomocou top, htop alebo atop, filtrovania pomocou pgrep, ovládania pomocou kill a ladenia pomocou nice, spolu s diagnostickými nástrojmi ako strace a lsof – je možné veľmi presne pochopiť a kontrolovať, čo sa v systéme Linux deje v danom čase, identifikovať problematické procesy a vlákna a udržiavať výkon pod kontrolou aj v náročných prostrediach.
Vášnivý spisovateľ o svete bajtov a technológií všeobecne. Milujem zdieľanie svojich vedomostí prostredníctvom písania, a to je to, čo urobím v tomto blogu, ukážem vám všetko najzaujímavejšie o gadgetoch, softvéri, hardvéri, technologických trendoch a ďalších. Mojím cieľom je pomôcť vám orientovať sa v digitálnom svete jednoduchým a zábavným spôsobom.