Erlang OTP: hajautettujen ja vikasietoisten järjestelmien ohjelmointi · Oppitunti

Muistianalyysi ja roskienkeruun säätäminen

Tunnista muistin kasvu, tarkastele prosessikohtaisia kekoja ja säädä Erlangin roskienkeruuta, jotta pitkään käynnissä olevat solmut pysyvät terveinä.

Oppitunti 4/413 vaihetta

Muistianalyysi ja roskienkeruun säätäminen on ilmainen Erlang OTP: hajautettujen ja vikasietoisten järjestelmien ohjelmointi-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Erlang OTP: hajautettujen ja vikasietoisten järjestelmien ohjelmointi-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Erlang OTP: hajautettujen ja vikasietoisten järjestelmien ohjelmointi-kurssilla on yhteensä 4 oppituntia.

Miksi muistilla on merkitystä?

Erlang-solmut voivat olla käynnissä kuukausia. Pieni prosessikohtainen muistivuoto tai rajattomasti kasvava viestijono kasvaa huomaamatta, kunnes käyttöjärjestelmä lopettaa solmun. Muistin havainnointi on välttämätöntä.

Koko järjestelmän muisti

erlang:memory/0 palauttaa erittelyn muistinkäytöstä: kokonaismäärän, prosessit, atomit, binäärit, ETS:n ja muuta. Seuratkaa luokkia, jotka kasvavat ajan mittaan.

erlang:memory().

Prosessikohtainen tarkastelu

process_info/2 näyttää yksittäisen prosessin keon, viestijonon pituuden ja muuta tietoa — nämä ovat olennaisia syyllisen löytämisessä.

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

Viestilaatikon ansa

Jos prosessi vastaanottaa viestejä nopeammin kuin ehtii käsitellä niitä, sen viestilaatikko kasvaa rajatta. Suuri message_queue_len-arvo on ylikuormittuneen kuluttajan klassinen merkki.

Binäärit ja Refc-vuodot

Suuret binäärit käyttävät viitelaskentaa ja jaetaan keon ulkopuolella. Pientä alibinääriä hallussaan pitävä prosessi voi estää valtavan emobinäärin vapauttamisen. Seuratkaa binary-muistiluokkaa tarkasti.

Pahimpien kuluttajien löytäminen

Lajitelkaa kaikki prosessit muistin käytön mukaan, jotta löydätte vuodot nopeasti.

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

Erlangin roskienkeruun toiminta

Jokaisella prosessilla on oma yksityinen keonsa, jonka roskat kerätään itsenäisesti — maailmanlaajuista kaikkien prosessien pysäyttävää taukoa ei ole. Keruu käynnistyy, kun prosessin keko täyttyy.

Roskienkeruun käynnistäminen manuaalisesti

Jos epäilette prosessin pitävän roskia hallussaan, pakottakaa roskienkeruu ja mitatkaa muisti uudelleen.

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

Keon säätäminen

Spawn-asetuksilla, kuten min_heap_size ja fullsweep_after, voitte säätää roskienkeruuta kuormitetuille prosesseille ja vaihtaa muistinkulutusta vähäisempään keruiden määrään.

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

Horrostila

Joutokäynnillä olevat prosessit voivat kutsua hibernate-toimintoa tiivistääkseen keonsa vähimmäiskokoon. Tämä vapauttaa muistia seuraavan viestin saapumiseen asti ja sopii hyvin useille enimmäkseen joutilaana oleville yhteyksille.

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

ETS-taulujen seuraaminen

ETS-taulut sijaitsevat prosessikeon ulkopuolella eivätkä kutistu automaattisesti. Kasvava ets-muistiluokka tarkoittaa usein vanhentuneita rivejä. Siivotkaa niitä säännöllisesti tai käyttäkää tauluja, joiden koko on rajattu.

ets:info(my_table, memory).

Pikatarkistus

Testatkaa muistin säätämistä koskevaa tuntemustanne.

Kertaus

Opitte analysoimaan ja optimoimaan muistia:

  • erlang:memory/0 antaa koko järjestelmän kattavan erittelyn
  • process_info/2 tarkastelee prosessikohtaista kekoa ja postilaatikkoa
  • Kasvavat postilaatikot ja kiinnitetyt binäärit ovat yleisiä muistivuotojen lähteitä
  • Jokainen prosessi suorittaa roskienkeruun itsenäisesti; maailmanlaajuista pysäytystä ei ole
  • Optimoikaa toimintaa spawn-asetuksilla ja käyttäkää hibernate-toimintoa joutilailla prosesseilla
Aloita maksutta

Opi Erlang tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Muistianalyysi ja roskienkeruun säätäminen” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Erlang OTP: hajautettujen ja vikasietoisten järjestelmien ohjelmointi-oppimispolun 3 oppituntia, myös oppitunnin “Muistianalyysi ja roskienkeruun säätäminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Erlang OTP: hajautettujen ja vikasietoisten järjestelmien ohjelmointi-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Muistianalyysi ja roskienkeruun säätäminen”?

Tunnista muistin kasvu, tarkastele prosessikohtaisia kekoja ja säädä Erlangin roskienkeruuta, jotta pitkään käynnissä olevat solmut pysyvät terveinä. Harjoittelet Erlang OTP: hajautettujen ja vikasietoisten järjestelmien ohjelmointi-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Erlang OTP: hajautettujen ja vikasietoisten järjestelmien ohjelmointi-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Erlang OTP: hajautettujen ja vikasietoisten järjestelmien ohjelmointi-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Muistianalyysi ja roskienkeruun säätäminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Erlang OTP: hajautettujen ja vikasietoisten järjestelmien ohjelmointi-oppitunnilla?

Kyllä. Jokainen Erlang OTP: hajautettujen ja vikasietoisten järjestelmien ohjelmointi-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Erlangin profilointitekniikat
  2. Hajautettujen järjestelmien jäljitys ja virheenkorjaus
  3. Mittausten ja valvonnan integrointi
  4. Muistianalyysi ja roskienkeruun säätäminen
← Takaisin: Erlang OTP: hajautettujen ja vikasietoisten järjestelmien ohjelmointi