Ladění paměti v Linuxu: klíčové nástroje a techniky

Poslední aktualizace: 26 z února 2026
  • Linux nabízí příkazy jako free, vmstat, ps a top pro kontrolu skutečného využití paměti a CPU, přičemž rozlišuje mezi použitou, volnou a uloženou v mezipaměti.
  • Nástroje jako GDB a Valgrind umožňují detekovat chyby segmentace, úniky paměti, neplatné přístupy a neinicializované proměnné v nativních programech.
  • V prostředích .NET Core usnadňuje kombinace dotnet-dump, LLDB a SOS hloubkovou analýzu výpisů paměti v systémech Linux i Windows.
  • Uspořádaný diagnostický pracovní postup, který kombinuje systémové metriky, protokoly a analýzu výpisů, dramaticky zkracuje čas potřebný k lokalizaci a opravě problémů s pamětí.

Ladění paměti v Linuxu

Když se na linuxovém serveru něco pokazí, příčina je často ve způsobu používání serveru. nástroje pro paměť a laděníAle dokud nevíte, co hledat, všechno se jeví jako chaotická změť čísel a procesů. Pochopení toho, co se děje v paměti RAM, jak se vaše programy chovají a jak zaznamenávat výpisy paměti, je klíčem k tomu, abyste se vyhnuli nečinnosti pokaždé, když se objeví podivná chyba nebo problém. segmentační chyba.

V tomto článku se podrobně a bez zbytečných okolků podíváme na to, jak... prohlížet paměť, ladit programy a analyzovat výpisy v Linuxu pomocí systémových příkazů (free, vmstat, /proc/meminfo), debuggerů jako GDB, analyzátorů paměti jako Valgrind a utilit specifických pro .NET a další prostředí. Myšlenka je taková, že odejdete s „praktický arzenál"diagnostikovat problémy s pamětí a procesorem na serverech a v profesionálních vývojových prostředích.

Přehled: Paměť v Linuxu a proč byste se neměli zaměřovat na 100 %

Na linuxovém serveru, RAM funguje jako rychlé úložné zařízení pro data a kód, které systém potřebuje brzy znovu použít. Přístup k paměti RAM je mnohem rychlejší než přístup k disku, takže jádro toho využívá k použití paměti jako mezipaměti pro soubory, vyrovnávací paměti a paměťové stránky, které by mohly být brzy znovu potřeba.

V kontextu webový server s Apache nebo NginxNapříklad v databázovém serveru, jako je MySQL nebo MariaDB, je pro správné dimenzování služeb a pochopení zásadní vědět, kolik paměti je využíváno, kolik je volné a kolik je uloženo v mezipaměti. jmenné prostory a kontrolní skupinyVe skutečnosti optimalizační nástroje, jako např. mysqltuner Tato data (a další data) používají k navrhování úprav vyrovnávacích pamětí, mezipamětí a připojení.

Je důležité pochopit myšlenku, která se zpočátku často zdá šokující: Paměť RAM je navržena tak, aby byla zaneprázdněnáVyužití RAM na 90 % nebo dokonce 100 % nemusí být nutně problém; Linux plní RAM mezipamětí disku, aby zrychlil systém. Skutečný problém nastává, když se začnou objevovat chyby. chyby selhání pamětiProcesy, které ukončí činnost s chybou OOM (Out Of Memory), nebo služby, které se zhroutí, nejen to, že graf ukazuje „vysoce využívané“.

Do agresivní optimalizace má smysl jít pouze tehdy, pokud si všimnete, že server služby se stanou nestabilními, pomalými nebo přerušovanými. kvůli nadměrnému využití paměti nebo pokud víte, že se blíží špičky v provozu, které by mohly zahltit stávající zdroje.

Základní příkazy pro kontrolu paměti v Linuxu

Nástroje pro práci s pamětí v Linuxu

Prvním krokem při řešení problémů s pamětí je mít jasno Kolik máš celkem RAM a jak je rozdělena? mezi použitou pamětí, volnou pamětí, mezipamětí a swapem. Linux pro tento účel nabízí několik utilit, každá s jinou úrovní detailů.

Příkaz free: rychlý přehled RAM a swapu

Nejčastěji používaný příkaz pro rychlý náhled je uvolnit, zejména s parametrem -h Zobrazení velikostí v čitelném formátu: Další informace o interpretaci a optimalizaci těchto metrik naleznete v části optimalizovat statistiky paměti.

free -h

Typický výstup vám v několika řádcích ukáže celková paměť, použitá paměť, volná paměť, sdílená paměť, vyrovnávací paměti a mezipaměťpro RAM i odkládací prostor. Uvidíte něco jako toto:

Celkem použitých volných sdílených vyrovnávacích pamětí v mezipaměti Paměť: 2.0 G 1.5 G 470 M 300 M 0 B 414 M -/+ vyrovnávacích pamětí/mezipaměti: 1.1 G 885 M Swap: 0 B 0 B 0 B

Řádek -/+ buffers/cache Je to obzvláště užitečné, protože ukazuje paměť skutečně využívanou procesy (bez vyrovnávacích pamětí/cache) a paměť potenciálně dostupnou pro nové aplikace. Mnoho lidí vidí na prvním řádku málo „volné paměti“ a znepokojí se, když ve skutečnosti je velká část pouze uložena v cache a lze ji použít. znovu použito bez dramatu.

vmstat: metriky aktivní paměti, paměti v nečinnosti a systému

Když potřebujete něco podrobnějšího, vmstat Poskytuje techničtější obrázek o systému. S:

vmstat -s -S M

Zobrazí se seznam s celkovou pamětí, použitou pamětí, volnou pamětí, aktivní pamětí, neaktivní pamětí, vyrovnávacími pamětí, odkládací pamětí atd. Například:

2048 M celkem paměti 1582 M použité paměti 1124 M aktivní paměti 406 M neaktivní paměti 465 M volné paměti 0 M vyrovnávací paměti 407 M swap cache 0 M celkem swap 0 M použité swap 0 M volné swap

Pojem neaktivní paměť Je to zajímavé: jedná se o paměť, která je považována za používanou, ale není spojena s aktivními procesy, takže se z praktických důvodů chová takto paměť obnovitelná systémemTo pomáhá pochopit, proč se může zdát, že Linux „zabírá veškeré místo“, ale ve skutečnosti má prostor pro uvolnění zdrojů, když je to potřeba.

/proc/meminfo: podrobnosti o surovém jádře

Pokud chcete všechny podrobnosti o tom, co jádro zpracovává, můžete se vždy podívat do souboru / proc / meminfo:

cat /proc/meminfo

Tento soubor obsahuje desítky polí souvisejících s správa interní pamětiCelková paměť, volná paměť, vyrovnávací paměti, mezipaměť, slab, obrovské stránky, dostupná paměť atd. Je velmi užitečný pro automatizované nástroje a monitorovací skripty, i když jeho přímé čtení je poněkud méně uživatelsky přívětivé než free nebo vmstat a vyžaduje dobré pochopení významu jednotlivých polí.

Ovládací panely a jejich „paralelní realita“

Pokud spravujete server s dashboardy, jako je cPanel, Plesk, VestaCP nebo WebminUvidíte, že často zobrazují grafy použité, volné a mezipaměti paměti prostřednictvím webového rozhraní. Tato data jsou praktická, ale mějte na paměti, že Jsou aktualizovány v pravidelných intervalech A někdy neodrážejí přesný stav v reálném čase. Pro seriózní diagnostiku a přesné ladění je vždy nejlepší obrátit se na terminálové a nativní příkazy.

Ladění procesů a paměti pomocí systémových nástrojů

Jakmile zjistíte, kolik paměti je k dispozici a jak se obecně využívá, dalším krokem je nalezení které procesy spotřebovávají zdroje anomálním způsobem a analyzovat jeho chování. Zde přicházejí na řadu klasické utility jako ps, top, htop, strace, ltrace a také síťové a diskové příkazy, které pomáhají eliminovat úzká hrdla.

ps, top a htop: rentgenový snímek procesů a CPU

Příkaz ps Zobrazuje aktivní procesy. V kombinaci s filtry a řazením umožňuje rychle najít, co spotřebovává CPU:

ps aux --sort=-%cpu | head

Toto vám ukazuje procesy seřazené podle procento CPU, spolu s použitou pamětí, uživatelem a příkazem. Je ideální jako snímek k nalezení hlavního podezřelého, když serveru docházejí zdroje; ovládnout terminál Pomáhá vám to jednat rychle.

  Lehké operační systémy pro oživení starých počítačů

Kromě toho, AutoCruitment LLC („Společnost“ nebo „My“ nebo „AutoCruitment“) respektuje ochranu vašeho soukromí a je odhodlaná ho dodržováním těchto zásad chránit. Tyto zásady popisují typy informací, které můžeme shromažďovat od vás nebo které vy můžete poskytnout, když navštívíte webové stránky a jeho vizuálnější varianta htop Nabízejí přehled o procesech, využití CPU, paměti, stavu (R, S, D atd.) a aktuálním stavu v reálném čase. průměr zatíženíPři spuštění shora:

top -o %CPU

Můžete se zaměřit na to, které procesy využívají nejvíce CPU. Kromě čísel je důležité se podívat i na... patrones:

  • Procesy ve stavu R (spuštěno) které zůstanou dlouho uvízlé nahoře.
  • Náhlé změny průměrného zatížení které naznačují nedávné špičky zatížení.
  • Alokace CPU v %us, %sy a %wa (uživatelský čas, systémový čas a čekání na I/O).
  • Pokud je problematický proces systémová služba, konkrétní uživatel nebo démon.
  • Pokud je spotřeba stabilní, nebo Jde to nahoru a dolů trhaně., což může ukazovat na dávkové úlohy nebo nepravidelný provoz.

Hodnota %wa (čekání na I/O) velmi vysoké To naznačuje, že úzké hrdlo nemusí být v CPU, ale v diskový nebo úložný subsystém.

Prohlížení vláken procesu: top -H

U vícevláknových aplikací (Java, Python, Node atd.) nestačí vědět, který proces spotřebovává CPU; je také důležité vidět které konkrétní vlákno je mimo kontroluS:

top -H -p PID

V rámci procesu získáte podrobnosti o každém vlákně. Pokud se jedno z nich zobrazuje na 100 % a ostatní jsou nečinné, pravděpodobně se jedná o problém. nekonečná smyčka, podivná blokáda nebo špatně navržená kritická sekce v dané části kódu.

Priorita procesu: pěkné a renice

Pokud je intenzivní proces legitimní, ale nechcete, aby zahltil zbytek systému, můžete si s ním pohrát. priorita (laskavost)Příkazy pěkný y ledviny Umožňují spouštět procesy s nižší prioritou nebo upravovat prioritu již spuštěného procesu tak, aby jim jádro přidělovalo méně času CPU ve srovnání s jinými kritickými úlohami.

Další klíčové příkazy: pidof, kill, strace a ltrace

Když je systém pod tlakem, je užitečné mít možnost rychle lokalizovat a řídit procesy:

  • pidof: získá PID procesu z jeho názvu, ideální pro skripty nebo rychlé zásahy.
  • zabít: odesílá signály procesům (TERM, KILL atd.), buď k řádnému ukončení, nebo k zkrácení úlohy, pokud se zasekly.
  • obejmout: ukazuje systémová volání který provádí proces; ideální pro zobrazení toho, na čem je zaseknutý (čtení z disku, sockety atd.).
  • ltracePodobné jako strace, ale zaměřené na volání do knihkupectví, užitečné pro ladění problémů s používáním sdíleného API.

Tyto nástroje se nepoužívají pouze k vyhledávání úniků paměti nebo pádů, ale jsou také široce využívány v kybernetická bezpečnost, forenzní analýza a ladění neobvyklého chování binárních souborů.

Příkazy pro soubory a disk: lsof, df, du, locate

Pokud máte podezření, že s úložištěm je něco v nepořádku (například mnoho otevřených souborů nebo plné disky), vstupují do hry další příkazy:

  • takévyjmenovat soubory otevřené procesem, užitečné pro nalezení úniků deskriptorů nebo souborů, které brání odpojení souborového systému.
  • df: ukazuje volné místo na disku podle souborového systému, což je nezbytné pro vyloučení 100 % disků, které způsobují kaskádové selhání.
  • duvypočítat prostor využívaný adresáři, velmi užitečné pro vyhledávání složek, které nekontrolovatelně rostou (protokoly, zálohy atd.).
  • vyhledat: umožňuje vyhledávat soubor podle názvu pomocí indexované databáze, v mnoha situacích rychleji než hledání.

Síťové příkazy pro diagnostiku: nc, netstat, ab, tcpdump, wireshark, nmap

Problémy s výkonem a pamětí jsou často doprovázeny úzká hrdla sítě nebo útokyProto je dobré mít po ruce několik základních nástrojů:

  • nc (netcat): opravdový švýcarský nůž pro síťování; otevírá sockety, odesílá a přijímá data, umožňuje testování služeb, a dokonce i improvizované tunely.
  • netstat: zobrazuje aktivní připojení, naslouchající sockety a síťové statistiky, což je užitečné pro zjištění, zda je k určitému portu přivedeno mnoho připojení.
  • ab (benchmark Apache): generuje zátěž pro webový server za účelem měření doby odezvy a chování v podmínkách stresu.
  • tcpdump a WiresharkZachycují síťové pakety, aby hloubková analýza provozu; tcpdump v konzoli, Wireshark s grafickým rozhraním.
  • nmapSkener portů a služeb, široce používaný jak pro bezpečnostní audity, tak pro kontrolu povrch expozice serveru.

GDB: klasický debugger pro chyby paměti a pády za běhu

Když program v Linuxu spadne s chybou segmentační chyba Nebo pokud se objeví další závažná chyba, dalším logickým krokem je použití dobrého debuggeru. Hvězdným nástrojem ve světě GNU je GDB (GNU Debugger), což vám umožňuje prohlížet vnitřní stav programu, zastavit ho kdekoli chcete, zobrazit proměnné, paměť a sledovat jeho provádění krok za krokem.

GDB byl původně navržen pro programy v jazycích C a C++, ale byl rozšířen i do dalších jazyků, jako například Rez nebo dokonce montáža pro zpracování knihoven, jako například LD_LIBRARY_PATHJe zásadní ve vývoji, ale také v kybernetické bezpečnosti, kde se používá k... reverzní inženýrství, vyhledávání zranitelností a vývoj nebo ladění exploitů.

Spusťte GDB a program

Pro použití GDB se spustitelným souborem se doporučuje zkompilovat program s informace o ladění pomocí možnosti -g z GCC:

gcc -g -Wall programa.c -o programa

Pak to spustíte pomocí:

gdb programa

V GDB program zatím neběží. Můžete ho spustit pomocí:

  • běhSpusťte program s libovolnými argumenty.
  • ZačítStejné jako run, ale zastaví se na začátku funkce main.

Pokud máte spustitelný soubor s názvem například suma A pokud chcete vidět, jak zpracovává argumenty, jdete do GDB a použijete run 3 5 spustit jej s těmito parametry z debuggeru.

Zarážky a sledovací body: pozastavení programu tam, kde je to potřeba

L zarážky Toto jsou body zastavení ve zdrojovém kódu: když jich provádění dosáhne, program se zastaví a můžete si prohlédnout celý vnitřní stav. V GDB jsou definovány příkazem:

break lugar

kde „místo“ může být název funkce, číslo řádku nebo file:lineTypickým příkladem by bylo:

break main

...takže GDB se zastaví hned při vstupu do funkce main. Když se program zastaví na zarážce, můžete vidět kód s l (seznam), dotazovat se na proměnné a procházet zásobníkem volání.

L sledovací body Fungují odlišně: místo zastavení v určitém bodě kódu se zastaví, když změnit hodnotu proměnnéJsou velmi užitečné pro detekci poškození paměti nebo neočekávané úpravy v kritických strukturách, aniž by bylo nutné zahlcovat kód výtisky.

Jemné řízení toku: krok, další, pokračovat, konec

Jakmile je program zastaven v bodě přerušení, máte několik možností, jak pokračovat:

  • krok: provede následující řádek a zadá volané funkce.
  • další: provede následující řádek bez zadání funkcí (spouští je „všechny najednou“).
  • pokračovat: obnoví provádění až do dalšího bodu přerušení nebo do ukončení programu.
  • dokončit: pokračuje, dokud se aktuální funkce nevrátí a nevrátí se do bodu, odkud byla volána.
  Optimalizace pipeline v Linuxu: od pipeline po pokročilou CI/CD

To vám umožňuje krok za krokem kontrolovat podezřelý kód, aniž byste museli „polknout“ celý program. Šikovný trik: v GDB, Stisknutím klávesy Enter se zopakuje poslední příkazideální pro výrobu mnoha next o step následované menším množstvím psaní.

Zásobník volání a rámce: jak jsme se sem dostali

Abychom pochopili, proč v určitém okamžiku došlo k selhání, je nezbytné zjistit, které funkce byly volány před tímto okamžikem. Struktura, která tyto informace ukládá, je zásobník voláníGDB nabízí několik příkazů pro jeho správu:

  • bt (backtrace): zobrazuje kompletní zásobník se seznamem vnořených funkcí a čísly rámců.
  • up: posune se v zásobníku o jednu úroveň výše, do bodu, který volal aktuální funkci.
  • dolů: přejde o jednu úroveň níže, k funkci, která byla spuštěna.
  • fr (rámeček): zobrazí aktuální snímek nebo umožňuje přejít na jiný uvedením jeho čísla.

To vám umožňuje umístit se na různé úrovně volání (například přejít z interní funkce na hlavní) a podívejte se, jak byly proměnné na každém místě.

Interakce s pamětí: nastavení, návrat, zpětné sledování yx

Jednou z velkých výhod GDB je, že umožňuje číst a upravovat paměť za provozu zatímco je program pozastaven. Mezi užitečné operace patří:

  • sada: mění hodnotu proměnné během provádění, ideální pro testování scénářů bez nutnosti rekompilace.
  • návratová hodnota: vynutí, aby aktuální funkce vrátila zadanou hodnotu, aniž by pokračovala v provádění svého kódu.
  • zpětná trasa: již viděno, pro zobrazení aktuálního zásobníku volání.
  • x: zkoumá obsah paměti počínaje adresou, s různými formáty a velikostmi (například x/4xw 0x7fffffffe000 zobrazit čtyři slova v hexadecimální soustavě).

S těmito možnostmi můžete replikovat chyby, kontrolovat, zda nebezpečný vstup způsobuje přetečení, nebo prohlížet složité datové struktury v hromada nebo stoh.

Ladění po porážce s výpisy základních dat

Linux dokáže generovat základní soubor Když proces zhroutí kvůli signálu jako SIGSEGV, tento soubor obsahuje kompletní stav procesu v době zhroucení: paměť, registry, zásobník atd. Chcete-li je aktivovat v relaci, jednoduše:

ulimit -c unlimited

A chcete-li je pro uživatele trvaleji povolit, můžete je upravit /etc/security/limits.conf a přidejte řádek takto:

* soft core unlimited

Když dojde k pádu programu, vygeneruje se soubor, obvykle nazývaný jádro v pracovním adresáři. Pak jej můžete analyzovat pomocí GDB takto:

gdb ejecutable core

To vám umožňuje provést posmrtná analýza téměř jako by program stále fungoval, ideální v případech, kdy selhání nelze na vyžádání snadno reprodukovat.

Valgrind: hledání úniků paměti a chyb

Pro mnoho problémů s pamětí v C/C++ (a podobných jazycích) není GDB dostačující, protože není navržen tak, aby automaticky detekoval nelegální čtení, úniky dat nebo neinicializované využití pamětiA tam to přichází na řadu. valgrind, ladicí a profilovací systém, který emuluje procesor a monitoruje každý přístup k paměti.

Valgrind obsahuje několik nástrojů, ale nejpoužívanější je Kontrola paměti, který nahrazuje standardní správce paměti v jazyce C vlastním pomocí ochranné zóny kolem přidělených blokůDíky tomu dokáže detekovat:

  • Neinicializované využití paměti (proměnné, které se používají před přiřazením hodnoty).
  • Čtení/psaní po absolvování volného času (použití po uvolnění).
  • Přístup za hranicemi bloku paměti.
  • Úniky paměti (malloc bez volného místa, ztracené ukazatele atd.).

Bezchybný příklad: „čistý“ program pod Memcheck

Předpokládejme, že zkompilujete malý program „hello world“ s ladicími informacemi:

gcc -Wall -gstabs valgrind_hello_good.c -o valgrind_hello_good

Pokud to spustíte pod Valgrindem s:

valgrind --tool=memcheck --leak-check=full -v ./valgrind_hello_good

získáte stopu, kde nakonec SOUHRN CHYB Indikuje 0 chyb a nejsou hlášeny žádné úniky. To potvrzuje, že alespoň z pohledu Memchecku program nevykazuje žádné anomálie paměti.

Detekce úniků paměti

Pokud upravíte kód tak, aby provedl Malloc bez hříchu (například rezervace bajtu a jeho neuvolnění) a překompilujete:

gcc -Wall -gstabs valgrind_hello_bad.c -o valgrind_hello_bad

při běhu:

valgrind --tool=memcheck --leak-check=full -v ./valgrind_hello_bad

Valgrind vám ukáže SOUHRN HALDY kde „používá se při ukončení“ není rovno nule, což značí množství neuvolněné paměti. V sekci „rozhodně ztraceno“ navíc uvidíte počet uniklých bajtů a bloků spolu s trasování hovoru, které pochází z úniku (funkce, soubor a řádek kódu).

Pro složitější případy, kde se používají filtry, například 100 bajtů ve funkci leak()Východ z Valgrindu vás jasně nasměruje k malloc problematické, což umožňuje přidání free odpovídající a následně ověřte, zda se souhrn vrátí na nulové úniky.

Nezákonné činy a přístup mimo dosah

Dalším typickým typem chyb, které Memcheck detekuje, jsou... dopisy na neplatné adresyNapříklad zápis na paměťovou pozici 0 (NULL) nebo za konec pole. Pokud kompilujete program, který provádí neplatný zápis:

gcc -gstabs -Wall valgrind_illegal_read_write.c -o valgrind_illegal_read_write

a spustíte jej pomocí:

valgrind -v ./valgrind_illegal_read_write

Uvidíte zprávy jako:

Neplatný zápis velikosti 4 v adresáři 0x80483C4: main (valgrind_illegal_read_write.c:8) Adresa 0x0 není uložena v zásobníku, převedena do paměti nebo (nedávno) uvolněna.

S tímhle přesně víš kde byl spáchán nezákonný čin A jaká byla jeho velikost, což se při běžných popravách obvykle projevuje jako jednoduchá „chyba segmentace“ bez dalších vodítek.

Neinicializované proměnné a jejich závislosti na hodnotách

Memcheck vás také upozorní, když Rozhodnutí o řízení závisí na neinicializované proměnnéPokud kompilujete program s lokální proměnnou, která není nikdy inicializována a je použita v if:

gcc -gstabs -Wall valgrind_unitialized.c -o valgrind_unitialized

a spouštíte to pomocí:

valgrind -v --track-origins=yes ./valgrind_unitialized

Výstup bude obsahovat něco jako:

Podmíněný skok nebo přesun závisí na neinicializované hodnotě (hodnotách) v bodě 0x80483F2: main (valgrind_unitialized.c:9). Neinicializovaná hodnota byla vytvořena alokací zásobníku v bodě 0x80483EA: main (valgrind_unitialized.c:7).

Parametr –track-origins=yes Pomáhá to lokalizovat, kde byla neinicializovaná proměnná poprvé vytvořena, což výrazně urychluje opravu kódu.

Zneužití volných funkcí a detekce chyb v haldě

Valgrind také ověřuje, že Funkce free se volá pouze na platné ukazatele.Pokud se pokusíte uvolnit paměť, která nepochází z mallocNebo pokud dvakrát kliknete na stejný blok, zobrazí se vám zprávy podobné této:

Neplatné volby free() / delete / delete[] / realloc() v bodě 0x402B06C: free (...) od 0x8048449: main (valgrind_illegal_free.c:11)

V mnoha případech vám dokonce sdělí, že adresa, ze které voláte, je free Nachází se bezprostředně za blokem, který již byl uvolněn, což umožňuje identifikaci. chyby ve výpočtu ukazatele nebo dvojité uvolnění.

  Jmenné prostory a cgroups v Linuxu: skutečný základ kontejnerů

Stručně řečeno, Valgrind je nezbytný nástroj, když máte podezření úniky paměti, použití po uvolnění paměti nebo poškození paměti v nativních programech a jeho kombinované použití s ​​GDB poskytuje velmi silný pohled na vnitřní stav aplikací.

Výpisy a analýzy jádra v Linuxu a Windows

V moderních aplikacích, zejména v .NET CoreAnalýza složitých problémů s pamětí nebo výkonem často zahrnuje zachycení výpisy paměti aby je bylo možné klidně analyzovat na jiném počítači. Tyto výpisy zmrazují stav procesu v určitém okamžiku, stejně jako tradiční výpisy jádra.

Analýza výpisů .NET v Linuxu pomocí dotnet-dump a LLDB

V prostředích .NET Core na Linuxu je jedním z doporučených nástrojů dotnet-dumpPo zachycení výpisu můžete začít s analýzou pomocí:

dotnet-dump analyze <dump-file>

Je důležité, aby analýza byla provedena na stroji s stejná architektura a distribuce Linuxu že prostředí, kde byl výpis generován. dotnet-dump je zaměřen na spravovaný kód .NET; pro analýzu nativního kódu (C/C++) je vhodnější použít LLDB spolu s prodloužením SOS.

LLDB umožňuje ladit jak spravovaný, tak nativní kód a s pomocí dotnet-sos Můžete si nainstalovat rozšíření SOS, které poskytuje specifické příkazy pro .NET. Pro správné načtení výpisu stavu .NET Core vyžadují LLDB a SOS určité binární soubory z prostředí, ve kterém byl výpis vytvořen:

  1. libmscordaccore.so
  2. libcoreclr.so
  3. dotnet (hostitel použitý ke spuštění aplikace)

Tyto binární soubory lze obvykle stáhnout pomocí nástroje symbol-dotnetPokud se jedná o soukromá stavba Pokud nejsou na symbolovém serveru, můžete je vždy zkopírovat z původního počítače. Pokud binární soubory nejsou součástí souboru s výpisem, můžete v LLDB/SOS použít následující:

  • setclrpath <ruta> k označení umístění binárních souborů .NET Core.
  • setsymbolserver -directory <ruta> pro určení umístění symbolů.

Jakmile budete mít vše potřebné, nahrajte výpis do LLDB a jako spustitelný soubor k ladění zadejte hostitele dotnet:

lldb --core <dump-file> <host-program>

Zde Je to cesta na skládku a Obvykle je binární. dotnet, pokud se nejedná o samostatnou aplikaci, v takovém případě by se jednalo o spustitelný soubor aplikace (bez přípony .dll).

V rámci LLDB je často nutné nakonfigurovat správný symbolový server s setsymbolserver -ms používat server společnosti Microsoft nebo setsymbolserver -directory <ruta> pro lokální adresář a spusťte loadsymbols k načtení nativních symbolů. Odtud můžete použít obvyklé příkazy SOS k analýze spravované haldy, vláken, výjimek atd.

Analýza výpisu Linuxu z Windows

Výpisy generované v Linuxu se neomezují pouze na analýzu na stejném systému; lze je také otevřít z Windows s nástroji jako Visual Studio, WinDbg nebo opět dotnet-dump. Možnosti se liší:

  • Visual Studioumožňuje čištění skládek směsí nativní a spravovaný kóds velmi uživatelsky přívětivým grafickým rozhraním. Doporučuje se prostudovat si konkrétního průvodce Ladění výpisů paměti Visual Studia.
  • WinDbgPokročilá podpora pro uživatelské výpisy, včetně Linuxové výpisy s pracovním postupem podobným jako ve Windows. Pro výpisy z prostředí Linux x64 nebo Arm64 musíte použít verzi WinDbg pro x64 a pro výpisy x86 verzi pro x86.
  • dotnet-dump Ve Windows: používá se stejným způsobem jako v Linuxu, s dotnet-dump analyzeNezapomeňte zvolit verzi nástroje x64 nebo x86 podle architektury výpisu.

Profesionální diagnostika vysokého využití CPU a paměti

Kromě specifických nástrojů obvykle čištění paměti v Linuxu zahrnuje i uspořádaný pracovní postup aby se zabránilo nekontrolovanému střílení. Praktické schéma pro servery je následující:

  • Podívat se na AutoCruitment LLC („Společnost“ nebo „My“ nebo „AutoCruitment“) respektuje ochranu vašeho soukromí a je odhodlaná ho dodržováním těchto zásad chránit. Tyto zásady popisují typy informací, které můžeme shromažďovat od vás nebo které vy můžete poskytnout, když navštívíte webové stránky k detekci podezřelých vzorců a procesů načítání.
  • Potvrďte pomocí ps procesy, které využívají nejvíce CPU a paměti.
  • Zkontrolujte, zda je spotřeba logická (kompilace, dávky, indexování) nebo zda se jedná o anomální chování.
  • Analyzujte vlákna pomocí top -H -p PID pokud jde o vícevláknové procesy.
  • Prozkoumat servisní protokoly s journalctl nebo tailem.
  • Zkontrolujte, zda problém skutečně souvisí s procesorem, nebo je skrytý v... diskové I/O pomocí iostatu.

Aby se zjistilo, zda je úzké hrdlo v procesoru nebo na disku, iostat -xz 1 3 To je velmi užitečné: pokud vidíte disky s vysokým využitím a dlouhými čekacími dobami spolu s %wa vysoko v horní částiProblém pravděpodobně není v procesoru, ale v úložišti.

Použitím tohoto pracovního postupu je snazší diagnostikovat případy, jako například:

  • Boti nebo škodlivý provoz spouštění procesů php-fpm a přetížení webového serveru.
  • Un Mikroslužba v Javě s vláknem v nekonečné smyčce spotřebovávajíc celé jádro.
  • Proces v Pythonu, který se jeví jako vázaný na CPU, ale ve skutečnosti je zamčeno čekání na disk v každé iteraci smyčky.

Kombinací systémových nástrojů (ps, top, vmstat, free), debuggerů (GDB, LLDB, dotnet-dump), analyzátorů paměti (Valgrind) a síťových a diskových příkazů můžete vytvořit způsob práce, který řeší problémy s pamětí a výkonem v Linuxu. Přestaň být černou skříňkou a stát se něčím, co lze s metodou a trpělivostí identifikovat a opravit se značnou přesností.

pokročilý systémový monitor pro Linux
Související článek:
Pokročilý systémový monitor pro Linux: Kompletní průvodce

Obsah