Sobes.tech
Junior — Middle

Ako systematizovať situáciu, keď je žiadosť o pamäť úspešná, ale zdrojov nie je dosť na jej poskytnutie?

sobes.tech AI

Odpoveď od AI

V Go, keď požiadavka na alokáciu pamäte (napríklad cez make alebo new) úspešne prebehne, ale skutočne dostupné zdroje nie sú dostatočné na úplné využitie, zvyčajne vznikne situácia súvisiaca s nedostatkom pamäte alebo fragmentáciou.

Na systematizáciu takýchto prípadov môžete:

  • Spracovať chyby, ktoré vracajú funkcie na alokáciu pamäte, ak existujú (hoci new a make zvyčajne nevracajú chybu, ale spôsobujú panic pri kritickom nedostatku).
  • Používať profilovanie a sledovanie pamäte (pprof, runtime.MemStats) na sledovanie využitia zdrojov.
  • V prípade panic z nedostatku pamäte použiť recover na spracovanie a logovanie.

Príklad spracovania panic pri nedostatku pamäte:

func safeAlloc() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Pamäť nebola alokovaná:", r)
        }
    }()
    _ = make([]byte, 1<<40) // pokus o alokáciu veľmi veľkého slice
}

Takto sa systémová správa znižuje na správu chýb a sledovanie stavu pamäte v aplikácii.