Out of Memory (OOM) nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Out of Memory (OOM) — bu, tətbiq və ya əməliyyat sistemi yeni obyektlərin ayrılması və ya tələb olunan əməliyyatların yerinə yetirilməsi üçün mövcud olan RAM yaddaşını tükətdiyi vəziyyətdir.
Əməliyyat sistemləri kontekstində, OOM, sistemin yeni proses və ya iş ipi üçün yaddaş ayıra bilmədiyi zaman baş verir. Sistem tam çökməsinin qarşısını almaq üçün Linux-da OOM Killer adlı mexanizm mövcuddur; bu mexanizm çox yaddaş istifadə edən prosesləri məcburən sonlandırır və resursları azad edir.
Tətbiqlər kontekstində, OOM, Java Virtual Maşını (JVM) və ya digər icra mühiti yeni obyekt yaratmaq üçün yaddaş ayıra bilmədiyi zaman baş verir.
OOM-un səbəbləri müxtəlif ola bilər:
- Yaddaş sızması: Artıq istifadə olunmayan obyektlər yaddaşda qalır, çünki onlara istinadlar mövcuddur və bu, çöp toplayıcının onları silməsinə mane olur.
- Yaddaşın həddindən artıq istifadəsi: Tətbiq çox böyük yaddaş tələb edir və ya onu saxlayır (məsələn, böyük faylı tam yaddaşa yükləmək).
- Yaddaşın yetərsiz ayrılması: JVM parametrləri (məsələn,
-Xmx) və ya icra mühitinin konfiqurasiyası kifayət qədər yaddaş təmin etmir. - İş ipi və ya əlaqə hovuzlarının düzgün konfiqurasiyası: Çox sayda aktiv iş ipi və ya əlaqə yaddaşını çox istifadə edə bilər.
Tətbiq səviyyəsində OOM əlamətləri:
- Tətbiqin yavaşlaması.
- Loglarda
OutOfMemoryErroristisnaları. - Garbage Collector-in performansının azalması.
OOM-un diaqnostikası üçün aşağıdakı yanaşmalar istifadə olunur:
- Logların analizi:
OutOfMemoryErroristisnalarını və OOM Killer mesajlarını axtarın. - Heap dump-ların alınması: Xətanın baş verdiyi zaman yaddaşın vəziyyətinin görüntüsünü çıxarın və sonradan analiz üçün Eclipse Memory Analyzer Tool (MAT), VisualVM kimi vasitələrlə istifadə edin.
- Monitorinq: JVM və əməliyyat sisteminin yaddaş istifadəsini izləmək üçün Prometheus, Grafana, New Relic kimi monitorinq sistemlərindən istifadə edin.
- Profiling: Yaddaş istifadəsinin nümunələrini və sızma mənbələrini müəyyən etmək üçün JProfiler, YourKit kimi profilerlərdən istifadə edin.
// Yaddaş sızmasına səbəb ola biləcək Java kod nümunəsi
import java.util.ArrayList;
import java.util.List;
public class OOMExample {
private List<Object> largeList = new ArrayList<>();
public void addObjects() {
while (true) {
largeList.add(new Object()); // Davamlı obyektlər əlavə edir, silmir
}
}
public static void main(String[] args) {
OOMExample example = new OOMExample();
example.addObjects();
}
}
# Tez OOM nümayişi üçün yaddaş limiti ilə Java-nın işlədilməsi nümunəsi
java -Xmx64m OOMExample
OOM-u qarşısını almaq üçün:
- Kodun yaddaşdan səmərəli istifadə üçün optimallaşdırılması.
- JVM və ya icra mühitinin yaddaş parametrlərinin düzgün konfiqurasiyası.
- Daimi heap dump-ların analizi və profiling.
- İstehsalatda yaddaş istifadəsinin monitorinqi.