Sobes.tech
Junior — Middle

Kas gali sukelti operatyviosios atminties naudojimo padidėjimą programoje?

sobes.tech AI

Atsakymas iš AI

Didėjant RAM naudojimui Go programoje gali būti priežastys:

  • Atminties nutekiai: išlaikant nuorodas į objektus, kurie jau nėra reikalingi, pvz., dėl globalių kintamųjų ar uždarymų.
  • Dideli skaidiniai ar žemėlapiai: kurti ir saugoti dideles duomenų struktūras be valymo.
  • Dažnas atminties paskirstymas be jos atlaisvinimo: pvz., kurti daug objektų cikle.
  • Netinkamas gorutinių naudojimas: jei gorutinos nesibaigia, jos gali laikyti atmintį.
  • Duomenų kaupimas be dydžio apribojimo.

Diagnostikai galima naudoti atminties profilį su pprof.

Atminties profilio pradžios pavyzdys:

import (
    "net/http"
    _ "net/http/pprof"
)

func main() {
    go func() {
        log.Println(http.ListenAndServe("localhost:6060", nil))
    }()
    // kodo likutis
}

Vėliau galima analizuoti atminties dump'us ir ieškoti nutekėjimų.