- Linux Den administrerer letvægtsprocesser og tråde (LWP'er) på en samlet måde med konfigurerbare grænser i /proc og faktorer som stakstørrelse og hukommelse, der bestemmer det maksimale antal tråde.
- kommandoer Kommandoer som ps, top, htop og atop giver dig mulighed for at liste og overvåge processer og LWP'er, mens /proc og ps i trådtilstand gør det nemt at kende antallet af tråde pr. proces.
- Værktøjer som kill, pkill, nice, renice, strace, lsof, vmstat eller iostat bruges til at kontrollere, prioritere og fejlfinde processer og optimere systemets samlede ydeevne.
Hvis du administrerer servere eller arbejder ofte med Linux, vil du før eller siden få brug for Liste over processer, letvægtstråde (LWP'er) og overvåg deres ressourceforbrugAt vide, hvad der kører, hvor mange ressourcer det bruger, og hvordan hver proces er organiseret, er nøglen til at opdage flaskehalse, serviceafbrydelser eller usædvanlig systemadfærd.
I de følgende linjer finder du en meget komplet guide, hvor vi vil se Hvad er processer og LWP'er, hvordan man oplister dem, hvordan man ser deres grænser, og hvordan man overvåger dem i realtidVi vil bruge klassiske kommandoer (ps, top, htop…) som base, og også nogle mere avancerede teknikker med /proc, diagnosticeringsværktøjer og prioritetsindstillinger, alt sammen forklaret på et letforståeligt, lokalt spansk.
Processer, tråde og LWP'er i Linux: grundlæggende koncepter
I Linux, når du kører et program, en proces, der er forekomsten af det program i hukommelsensammen med alle de ressourcer, den har brug for: kode, data, filbeskrivelser, stak osv. Hver proces modtager en unik identifikator kaldet et PID (Process ID), som er det nummer, vi derefter bruger til at overvåge eller afslutte den.
Udover de “normale” eller tunge processer håndterer kernen de såkaldte lette tråde eller LWP'er (Letvægtsprocesser)En langvinduestråd (LWP) deler mange ressourcer (kode, data, åbne filer, signaler osv.) med andre tråde i den samme proces, men opretholder sin egen stak og udførelseskontekst. Dette gør kontekstskift mellem tråde meget billigere end at skifte mellem uafhængige processer.
En mærkelig ting ved Linux er, at det internt, Den skelner ikke strengt mellem proces og tråd.Begge administreres som kerneopgaver, og en tråd er i bund og grund en "proces", der deler ressourcer med andre. Der er ingen særlige trådstrukturer på kerneniveau som i andre systemer. OSI praksis kan vi dog bruge LWP'er til at opnå reel parallelisme i multi-core systemer.
Denne parallelisme opnås ved at fordele et programs arbejde på tværs af flere tråde. Hvert LWP kan køre på en anden processorkerneDette gør det muligt for programmet at udnytte alle tilgængelige kerner. Fordi omkostningerne ved at oprette og skifte LWP'er er lave, er Linux meget effektivt til at køre et stort antal tråde, forudsat at vi respekterer systemets begrænsninger.
Proces- og trådgrænser i Linux
Som med ethvert operativsystem er der et maksimalt antal opgaver, som kernen kan håndtere samtidigt. I Linux er disse Proces- og trådgrænser eksponeres som kerneparametre inden for pseudo-filsystemet /proc, på ruten /proc/sys/kernel/.
Den globale grænse for antallet af tråde, som kernen kan understøtte, gemmes i filen. /proc/sys/kernel/threads-maxHvis du tjekker indholdet af den fil med cat o sysctlDu får det maksimale antal LWP'er, som systemet er i stand til at oprette, før du nægter at starte flere opgaver.
Den værdi er normalt ret høj i moderne servere med flere kerner og masser af RAM, mens i beskedne hold eller virtuelle maskiner pequeñas Du kan støde på lavere tal. Hvis denne grænse nås, og ingen processer afsluttes, vil kernen ikke være i stand til at oprette nye processer eller tråde, hvilket kan føre til fejl ved lancering af tjenester eller kommandoer.
Der er en anden vigtig grænse i /proc/sys/kernel/pid_maxDette angiver det maksimale proces-ID, der kan tildeles. Denne værdi fungerer også i praksis som en grænse for antallet af processer (og dermed tråde), der kan sameksistere, da Linux behandler begge på en samlet måde. Når PID-tælleren når dette maksimum, starter den forfra, og det er almindeligt at se "gentagne" PID'er. El tiempomen tilhører helt andre processer.
Beregning af det maksimale antal tråde og justering af stakken
Det faktiske antal LWP'er, du kan have på et Linux-system, afhænger ikke kun af disse kerneparametre, men også af la virtuel hukommelse tilgængelig og størrelsen på stakken for hver trådEn almindeligt anvendt omtrentlig formel er:
maksimalt antal tråde ≈ virtuel hukommelse / (stakstørrelse × 1024 × 1024)
I det udtryk forespørges stakstørrelsen pr. tråd normalt med kommandoen ulimit -sDenne værdi angiver, hvor mange kilobyte hukommelse der er reserveret til stakken for hver LWP, der oprettes. En større stakstørrelse giver bedre beskyttelse mod overløb, men også Du vil kunne have færre samtidige tråde for den samme mængde hukommelse.
Hvis du har brug for at køre en applikation med tusinder eller titusindvis af tråde, kan det være af interesse. reducer stakstørrelsen pr. tråd ved at bruge igen ulimit (for eksempel i manuskripter af støvle eller systemtjenester), så længe applikationskoden ikke kræver enorme stakke.
Kort sagt er antallet af LWP'er i Linux begrænset af: kerneparametre (threads-max, pid_max), stakstørrelse pr. tråd og samlet tilgængelig hukommelseVed omhyggeligt at justere disse faktorer kan du skalere antallet af samtidige tråde uden at gå på kompromis med systemstabiliteten.
Grundlæggende kommandoer til listeprocesser og LWP'er
For at begynde at arbejde med processer og tråde i Linux er det klassiske værktøj kommandoen ps, som viser status for processerne Det er et øjebliksbillede (ikke realtid). I modsætning til en grafikskærm er dens output statisk: hvis du ønsker opdaterede oplysninger, genstarter du den blot.
med ps ingen muligheder Du vil kun se processer, der er knyttet til den aktuelle shell. For at opnå alle systemprocesserinklusive dem, der ikke har terminal i forbindelse med dette, er det sædvanlige at bruge:
ps aux
I det output vil du blandt andet se ejerbrugeren, PID, procentdelen af CPU og RAM, udførelsestid og kommandoen som hver proces blev startet med. Det er en masse information, men det er vigtigt for at finde opgaver, der bruger mange af maskinens ressourcer.
Nogle nyttige kombinationer af ps For at have mere kontrol over, hvad der vises, bruges følgende:
ps -eops -A: viser alle aktive processer i generisk format UNIX.ps -u nombre_usuarioviser kun processerne for en bestemt bruger.ps -axjfviser outputtet i et hierarkisk format, hvor underprocesser er indlejret under deres forældre.ps -C nombre_procesofiltrerer efter kommandonavn og inkluderer tilhørende underprocesser.
En anden almindelig mulighed er at bruge ps aux | grep patrón at beholde kun de processer, der indeholder den pågældende tekst, for eksempel en webdaemon, en databasemotor eller en script Det er specifikt en meget bekvem måde at finde det, du leder efter, med et hurtigt blik uden at fare vild i side og side af resultater.
Realtidsovervågning med top og htop
Når du har brug for at se, hvordan processer ændrer sig i realtid, er stjernekommandoen top, som viser en dynamisk skærm af systemets aktivitet. I modsætning til psOutputtet opdateres løbende og viser CPU-forbrug, hukommelsesforbrug, gennemsnitlig belastning, antal aktive opgaver og en ordnet liste over processer.
Ved blot at løbe topDu vil se processerne sorteret efter CPU-forbrug. Du kan omarranger efter andre felter, filtrer, afslut processer eller skift prioriteter ved at trykke på forskellige taster i selve brugerfladen (kombinationerne kan variere en smule afhængigt af versionen, men er normalt angivet nederst).
En typisk måde at fokusere på de tungeste processer er at bruge en kommando som:
top -o %CPU
Sådan placerer du den ovenpå de processer, der bruger mest CPUhvilket er meget nyttigt, når noget er begyndt at øge processorforbruget, og du hurtigt vil finde synderen.
Hvis du foretrækker noget mere visuelt, kan du installere htop, en forbedret version af top med en interaktiv brugerfladeFarvebjælker og tastatur- og musnavigation. På mange distributioner skal du først installere det ved hjælp af pakkehåndteringen, for eksempel:
sudo apt-get install htop
Når den er installeret, kører du htop og du får en farvekodet visning af belastningen pr. kerne, hukommelse, swap og en procestabel, hvor du kan Rul lodret og vandret, filtrer efter bruger, skift prioriteter, eller afslut processer uden manuelt at indtaste PID'et..
Ressourceovervågning med atop
For mere dybdegående ydeevneanalyse, især på servere, findes værktøjet atop, som registrerer og viser aktiviteten i alle processer med et højt detaljeringsniveau. Det er et tekstbaseret værktøj i fuld skærm, der fokuserer på udviklingen af belastning og ressourceforbrug over tid.
Når du kaster atopDu vil se statistikker over CPU, hukommelse, swap, diske og netværk som typisk opdateres hvert 10. sekund. Derudover kan den forblive aktiv i baggrunden i dagevis og gemme historik, som du senere kan gennemgå for at analysere et problem, der opstod tidligere.
Blandt dens fordele er evnen til at gruppeforbrug efter bruger eller efter procesnavnMarkér med rødt de kritiske ressourcer, der er ved at være lave, vis processer, der allerede er afsluttet, men stadig er relevante i loggen, og overvåg interne tråde (LWP'er) i hver proces.
I mange distributioner er det installeret med specifikke pakkerFor eksempel:
sudo apt install atop
sudo dnf install atop
Efter installationen skal du blot køre atop at begynde at se forbruget af CPU, hukommelse, disk og netværk på procesniveau og dermed med betydelig nøjagtighed kunne detektere, hvilken komponent der mætter systemet.
Sådan ser du antallet af tråde (LWP'er) pr. proces
Hvis det du er interesseret i er at vide hvor mange Letvægtsgarner har en specifik proces.Linux tilbyder flere måder at indhente disse oplysninger på. Den første involverer inspektion af pseudofilsystemet. /proc, hvor kernen eksponerer interne data for hver opgave.
inden /proc/<PID>/ du finder filen status, som inkluderer feltet TrådeVed at læse den fil kan du hurtigt se, hvor mange LWP'er processen med den pågældende PID har oprettet, sammen med mange andre detaljer såsom status, hukommelsesforbrug og muligheder.
En anden måde at bruge /proc Det handler om at se på indholdet af mappen /proc/<PID>/task/I denne sti opretter kernen en undermappe for hver tråd, der tilhører processen. Så mappeoptælling indenfor task matcher antallet af tråde. Du kan bruge ls kombineret med wc at udføre optællingen automatisk.
Ud over fremgangsmåden med /proc, selve kommandoen ps kan returnere information på trådniveauBrug af indstillingen -H du går ind i "trådtilstand", og med -p Du filtrerer efter et specifikt PID. Hvis du tilføjer -h Du undgår forbjerge, hvilket gør det nemmere at kanalisere strømmen mod wc og hent antallet af linjer, det vil sige antallet af LWP'er, der er angivet for den pågældende proces.
I alle disse metoder, hvis du anvender dem på den samme PID, trådantallet skal stemme overens: feltet Tråde for status, antallet af undermapper i task og startlinjerne for ps I trådtilstand bør de give det samme tal, bortset fra små variationer, hvis processen opretter eller ødelægger tråde på præcis det tidspunkt.
Filtrering og søgning efter processer med pgrep og grep
Når der kører hundredvis eller tusindvis af processer på maskinen, er det spild af tid at finde den, man er interesseret i, ved at scrolle. Det er her, det kommer til nytte. pgrep, som søger efter processer efter navn eller mønster og returnerer direkte de matchende PID'er.
Med en simpel pgrep apache Du vil se identifikatorerne for alle processer, hvis navn indeholder den pågældende tekst, på skærmen. Og hvis du har brug for at forfine din søgning yderligere, kan du Kombinér pgrep med brugerfiltreFor eksempel med muligheden -u for at begrænse søgningen til processerne for en bestemt konto.
En anden almindeligt anvendt taktik er at stole på grep at filtrere outputtet fra psEn typisk kommando kunne være ps aux | grep apache, som kun viser dig de proceslinjer, der indeholder ordet "apache", sammen med deres PID'er, ressourcer og fulde kommandoer.
Husk at denne type rørføring tilføjer ekstra processer (som f.eks. selve rørføringen) grep eller wc) til listen, så når du gør ting som ps r | wc -l Tælleren øges af headerrækken og af de processer, der er en del af selve pipelinen. Det er vigtigt at fortolke disse resultater korrekt for at undgå overraskelser med det samlede antal opgaver.
Generelt, mester ps + grep, pgrep og filtreringsmulighederne Det giver dig mulighed for at fokusere på det, der interesserer dig, uden at blive overvældet af systemprocesser, som du for det meste kan ignorere i en første analyse.
Kontrol og færdiggørelse af processer
Listing og overvågning af processer er fantastisk, men ofte er det, du har brug for, fuldføre problematiske opgaver eller overvåge deres status For at frigøre ressourcer eller genoprette systemstabilitet tilbyder Linux adskillige enkle værktøjer til dette formål.
Den mest kendte er kill, som sender signaler til processer identificeret af deres PIDHvis du ikke angiver et signal, sendes en SIGTERM, der anmoder processen om at afslutte på en ordnet måde. Hvis den modsætter sig, kan du bruge SIGKILL-signalet (valgmulighed -9), hvilket tvinger processen til at afslutte øjeblikkeligt uden at give mulighed for at rydde ressourcer.
Når du ikke ønsker at indsamle PID'er én efter én, har du pkill y killall, som opererer under navnet. Med pkill firefox Du vil afslutte alle processer, hvis navn matcher "firefox" for din bruger, mens killall Det har en tendens til at være mere aggressivt og kan påvirke alle forekomster af programmet på systemet, inklusive andre brugeres, afhængigt af tilladelser.
Det er også meget nyttigt at forstå, hvordan de fungerer fg y bg at lege med forgrunds- og baggrundsprocesserNår du afbryder en opgave med Ctrl+Z og derefter bruger bgDu sender den til baggrunden, så den fortsætter med at køre, mens du gendanner terminalen. Hvis du derefter har brug for at interagere med den igen, fg bringer hende tilbage i rampelyset.
Endelig, når du vil køre noget, der fortsætter med at køre, selv efter du logger ud, kan du kombinere nohup med at sende til baggrunden, for eksempel nohup script.sh &På denne måde afbrydes processen ikke, selvom du lukker terminalen, eller forbindelsen mistes. SSHDette er meget nyttigt til opgaver af længere varighed. Hvis du foretrækker at planlægge det, kan du se hvordan man planlægger opgaver med cron og ved.
Prioritetssætning med nice og renice
I flerbrugersystemer eller systemer med mange samtidige opgaver er det ikke nok at vide, hvor mange processer eller LWP'er der er; det er også vigtigt at vide, hvor mange processer eller LWP'er der er. bestemme hvilke processer der prioriteres i CPU-forbrugDet er her, kommandoerne kommer i spil. nice y renice.
Når du starter en proces med nice -n valor comando Du angiver dens relative prioritet. Det typiske interval er fra -20 (højeste prioritet) til 19 (laveste prioritet), hvor 0 er standardværdien. En højere nice-værdi betyder, at processen vil være mere hensynsfuld og give CPU-tid til andre, når den konkurrerer om ressourcer.
Hvis du for eksempel har et ressourcekrævende script, der ikke haster, men du ønsker, at det skal køre i baggrunden uden at forstyrre, kan du starte det med nice -n 10 ./script.shDette tildeler den en lav prioritet, så den ikke monopoliserer processoren, mens andre interaktive processer arbejder.
Hvis du i stedet for at justere prioriteten ved opstart har brug for ændre prioriteten for en proces, der allerede er i gang, du bruger reniceMed noget i retning af renice -n 5 -p PID Du ændrer processens nice-værdi med det pågældende PID og tilpasser den til aktuelle behov (hæver eller sænker dens prioritet).
Korrekt prioriteringsstyring med Nice og Renice hjælper med at forhindre en enkelt proces eller et sæt tråde i at Det forringer systemets responstid, især i delte servere eller produktionsmiljøer med mange samtidige belastninger.
Avancerede værktøjer til fejlfinding og analyse af processer
Når en proces eller en af dens LWP'er opfører sig mærkeligt, går ned eller ser ud til at fryse systemet, er det ofte nødvendigt at finde mere avancerede diagnosticeringsværktøjer. Et af de mest kraftfulde er stracehvilket giver dig mulighed for at overvåge systemkald foretaget af en proces i realtid. For dybere kernefejl er der en vejledning på brug crash og kdump.
Med en kommando som strace -p PID puedes at blive involveret i en proces, der allerede er i gang og se hvilke systemkald den udfører (fillæsning, skrivning, netværksoperationer, signaler osv.). Dette er især nyttigt til at finde ud af, hvorfor en proces venter på "noget": måske er den blokeret i forsøget på at åbne en fil, der ikke findes, venter på en socket, eller sidder fast med utilstrækkelige tilladelser.
Et andet klassisk diagnostisk værktøj er lsof (Liste over åbne filer)Dette værktøj viser de filer, der er åbnet af hver proces, inklusive diskfiler, netværkssockets, enheder og mere. Det er meget nyttigt til at registrere, hvilken proces der optager en bestemt port, hvilken tjeneste der holder en fil låst, eller hvilke opgaver der læser en bestemt log.
Som supplement til lsof, fuser Den fortæller dig, hvilke processer der bruger en fil eller en port. Specifikt kan du for eksempel med en kommando på en TCP-port hurtigt finde ud af, hvilken daemon der lytter på det nummer, og handle i overensstemmelse hermed, enten ved at omkonfigurere den eller stoppe den.
For at tage performanceanalyse et skridt videre, har du pidstatsom tilbyder detaljeret statistik af CPU, hukommelse og I/O pr. proces, og med watchhvilket giver dig mulighed for periodisk at udføre kommandoer som f.eks. ps -e o netstat at observere på skærmen, hvordan processer eller forbindelser udvikler sig over tid.
Servicestyring og generel systemstatus
Mange vigtige processer i Linux er faktisk tjenester eller dæmoner, der kører i baggrunden, såsom webservere, databaser eller opgaveplanlæggere. I moderne systemer med systemd er det centrale værktøj til at administrere disse tjenester systemctl.
med systemctl start nombre_servicio Du kan starte en tjeneste, mens systemctl stop, restart y status De giver dig mulighed for at stoppe den, genstarte den eller se dens aktuelle status. Du kan også aktivere eller deaktivere dens automatiske opstart ved systemstart, hvilket direkte påvirker, hvilke processer der vises på listen efter en genstart.
I ældre distributioner eller konfigurationer, der stadig bruger SysVinit, er det almindeligt at finde kommandoen service til administration af tjenester. Selvom det i mange tilfælde er blevet erstattet af systemd, er det stadig nyttigt som et kompatibilitetslag til at starte, stoppe eller genstarte specifikke dæmoner.
Ud over tjenesterne er det værd at have et globalt overblik over systemets tilstand. Kommandoen uptime Den viser, hvor længe maskinen har været tændt, hvor mange brugere der er tilsluttet, og den seneste gennemsnitlige belastning, hvilket giver en hurtig idé om, om systemet er komfortabelt eller overbelastet.
For en mere detaljeret præstationsanalyse, vmstat Den leverer statistik om CPU, hukommelse, processer og swap.Mens iostat Den fokuserer på disk I/O og viser enhedernes læsninger, skrivninger og svartider. opbevaringDisse værktøjer er uvurderlige til at opdage, om problemer stammer fra CPU'en, RAM'en, disken eller en kombination af dem alle.
Kombination af alt ovenstående – listeprocesser og LWP'er med ps og /proc, realtidsovervågning med top, htop eller atop, filtrering med pgrep, kontrol med kill og finjustering med nice, sammen med diagnostiske værktøjer som strace og lsof – gør det muligt. at forstå og kontrollere meget præcist, hvad der sker i et Linux-system til enhver tid identificere problematiske processer og tråde og holde ydeevnen under kontrol, selv i krævende miljøer.
Passioneret forfatter om bytes-verdenen og teknologien generelt. Jeg elsker at dele min viden gennem skrivning, og det er det, jeg vil gøre i denne blog, vise dig alle de mest interessante ting om gadgets, software, hardware, teknologiske trends og mere. Mit mål er at hjælpe dig med at navigere i den digitale verden på en enkel og underholdende måde.
