Sobes.tech
Junior — Middle

Jak systematizovat situaci, kdy je žádost o paměť úspěšná, ale zdrojů není dostatek k jejímu poskytnutí?

sobes.tech AI

Odpověď od AI

V Go, když úspěšně proběhne žádost o alokaci paměti (například přes make nebo new), ale skutečně není k dispozici dostatek zdrojů pro plné využití, obvykle se objeví situace související s nedostatkem paměti nebo fragmentací.

Pro systematizaci takových případů lze:

  • Zpracovávat chyby vrácené funkcemi alokace paměti, pokud existují (ačkoliv make a new obvykle nevracejí chybu, ale vyvolávají panic při kritickém nedostatku).
  • Používat profilování a sledování paměti (pprof, runtime.MemStats) pro sledování využití zdrojů.
  • V případě panic z nedostatku paměti použít recover pro zpracování a zaznamenání.

Příklad zpracování panic při nedostatku paměti:

func safeAlloc() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Paměť nebyla alokována:", r)
        }
    }()
    _ = make([]byte, 1<<40) // pokus o alokaci velmi velkého slice
}

Tímto se systémové zpracování omezuje na správu chyb a sledování stavu paměti v aplikaci.