Erlang OTP: Programmering af distribuerede og fejltolerante systemer · Lektion

Hukommelsesanalyse og tuning af garbage collection

Diagnosticér voksende hukommelsesforbrug, inspicér heaps pr. proces, og tun Erlangs garbage collection, så kørende noder forbliver sunde.

Lektion 4 af 413 trin

Hukommelsesanalyse og tuning af garbage collection er en gratis Erlang OTP: Programmering af distribuerede og fejltolerante systemer-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Erlang OTP: Programmering af distribuerede og fejltolerante systemer, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Erlang OTP: Programmering af distribuerede og fejltolerante systemer-kurset indeholder 4 lektioner i alt.

Hvorfor hukommelse er vigtig

Erlang-noder kan køre i månedsvis. En lille læk pr. proces eller en postkasse uden grænse vokser ubemærket, indtil noden bliver dræbt af operativsystemet. Det er afgørende at kunne observere hukommelsen.

Hukommelse i hele systemet

erlang:memory/0 returnerer en opdeling: total, processer, atom, binærdata, ETS og mere. Hold øje med de kategorier, der vokser over tid.

erlang:memory().

Inspektion pr. proces

process_info/2 viser en enkelt proces' heap, længden på meddelelseskøen og mere — vigtigt, når du skal finde synderen.

process_info(Pid, [memory, message_queue_len, heap_size]).

Postkassefælden

Hvis en proces modtager meddelelser hurtigere, end den behandler dem, vokser dens postkasse uden grænse. En stor message_queue_len er det klassiske tegn på en overbelastet forbruger.

Binære data og Refc-lækager

Store binære data tælles med referencer og deles uden for heapen. En proces, der holder på en lille delbinær værdi, kan fastholde en enorm overordnet binær værdi. Hold nøje øje med hukommelseskategorien binary.

Find de største syndere

Sortér alle processer efter hukommelsesforbrug for hurtigt at finde lækager.

lists:sort(fun({_,A},{_,B}) -> A > B end,
  [{P, element(2, process_info(P, memory))} || P <- processes()]).

Sådan fungerer Erlang-GC

Hver proces har sin egen private heap og får udført garbage collection uafhængigt — der er ingen global pause, hvor hele systemet standses. Oprydningen kører, når en proces' heap bliver fyldt.

Manuel udløsning af GC

For en proces, som du mistænker holder på affald, kan du tvinge en oprydning igennem og måle igen.

erlang:garbage_collect(Pid),
process_info(Pid, memory).

Justering af heapen

Indstillinger ved oprettelse, f.eks. min_heap_size og fullsweep_after, justerer GC for belastede processer og bytter hukommelse for færre oprydninger.

spawn_opt(fun work/0, [{min_heap_size, 1000}, {fullsweep_after, 10}]).

Dvale

Inaktive processer kan kalde hibernate for at komprimere deres heap til minimum og frigive hukommelse, indtil den næste meddelelse ankommer — velegnet til mange forbindelser, der for det meste er inaktive.

proc_lib:hibernate(?MODULE, loop, [State]).

Overvågning af ETS-tabeller

ETS-tabeller ligger uden for processernes heaps og bliver ikke automatisk mindre. En voksende hukommelseskategori for ets betyder ofte forældede rækker; beskær dem med jævne mellemrum, eller brug tabeller med en begrænset størrelse.

ets:info(my_table, memory).

Hurtigt tjek

Test din viden om justering af hukommelsen.

Opsummering

Du har lært at analysere og optimere hukommelse:

  • erlang:memory/0 giver en oversigt over hele systemet
  • process_info/2 undersøger heap og meddelelseskø for den enkelte proces
  • Voksende meddelelseskøer og fastholdte binære data er almindelige kilder til hukommelseslækager
  • Hver proces udfører garbage collection uafhængigt; der er ingen global pause
  • Optimér med spawn-indstillinger, og brug hibernate til inaktive processer
Gratis at komme i gang

Lær Erlang med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Hukommelsesanalyse og tuning af garbage collection” gratis?

Ja — alle 3 lektioner i læringssporet Erlang OTP: Programmering af distribuerede og fejltolerante systemer, inklusive “Hukommelsesanalyse og tuning af garbage collection”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Erlang OTP: Programmering af distribuerede og fejltolerante systemer-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Hukommelsesanalyse og tuning af garbage collection”?

Diagnosticér voksende hukommelsesforbrug, inspicér heaps pr. proces, og tun Erlangs garbage collection, så kørende noder forbliver sunde. Du øver dig i Erlang OTP: Programmering af distribuerede og fejltolerante systemer med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Erlang OTP: Programmering af distribuerede og fejltolerante systemer?

Der kræves ingen tidligere erfaring. Erlang OTP: Programmering af distribuerede og fejltolerante systemer på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Hukommelsesanalyse og tuning af garbage collection”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Erlang OTP: Programmering af distribuerede og fejltolerante systemer-lektion?

Ja. Alle Erlang OTP: Programmering af distribuerede og fejltolerante systemer-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Profilerings­teknikker i Erlang
  2. Tracing og debugging af distribuerede systemer
  3. Integration af metrics og overvågning
  4. Hukommelsesanalyse og tuning af garbage collection
← Tilbage til Erlang OTP: Programmering af distribuerede og fejltolerante systemer