Out of Memory (OOM) nima nima?
sobes.tech AI
AIdan javob
Out of Memory (OOM) — bu, ilova yoki operatsion tizim yangi obyektlarni ajratish yoki talab qilinadigan operatsiyalarni bajarish uchun mavjud operativ xotirani tugatganda yuzaga keladigan holat.
Operatsion tizimlar kontekstida, OOM, tizim yangi jarayon yoki ip uchun xotira ajrata olmaganda yuzaga keladi. To‘liq tizimning yiqilishining oldini olish uchun Linuxda OOM Killer mavjud bo‘lib, bu mexanizm juda ko‘p xotira sarflaydigan jarayonlarni majburan tugatadi va resurslarni bo‘shatadi.
Ilovalar kontekstida, OOM, Java Virtual Mashinasi (JVM) yoki boshqa bajarish muhitlari yangi obyekt yaratish uchun xotira ajrata olmaganda yuzaga keladi.
OOMning sabablari turlicha bo‘lishi mumkin:
- Xotira oqishi: Endi foydalanilmaydigan obyektlar xotirada qoladi, chunki ularga havolalar mavjud bo‘lib, bu esa garbage collector’ning ularni olib tashlashiga to‘sqinlik qiladi.
- Xotira ortiqcha sarfi: Ilova juda katta miqdordagi xotirani talab qiladi yoki uni ushlab turadi (masalan, katta faylni to‘liq xotiraga yuklash).
- Yetarli bo‘lmagan xotira ajratish: JVM sozlamalari (masalan,
-Xmx) yoki bajarish muhitining konfiguratsiyasi yetarli xotira taqdim etmaydi. - Ip yoki ulanishlar havolasining noto‘g‘ri sozlanishi: Juda ko‘p faol iplar yoki ulanishlar stack xotirasini yoki boshqa xotira sohalarini juda ko‘p sarflashi mumkin.
Ilova darajasida OOM belgilari quyidagicha bo‘lishi mumkin:
- Ilovaning sekinlashishi.
- Loglarda
OutOfMemoryErroristisnolari. - Garbage Collector’ning ishlashining pasayishi.
OOMni diagnostika qilish uchun quyidagi yondashuvlar qo‘llaniladi:
- Loglarni tahlil qilish:
OutOfMemoryErroristisnolarini va OOM Killer xabarlarini qidirish. - Heap dump’larni olish: Xatolik paytida heap mazmunining skrinshotini yaratish va uni Eclipse Memory Analyzer Tool (MAT), VisualVM kabi vositalar yordamida tahlil qilish.
- Monitoring: JVM va operatsion tizimning xotira foydalanishini kuzatish uchun Prometheus, Grafana, New Relic kabi monitoring tizimlaridan foydalanish.
- Profil qilish: Xotira foydalanish naqshlarini va oqish manbalarini aniqlash uchun JProfiler, YourKit kabi profilerlardan foydalanish.
// Xotira oqishiga olib kelishi mumkin bo‘lgan Java kodi misoli
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()); // Ob’ektlarni doimiy qo‘shish, o‘chirib bo‘lmaydi
}
}
public static void main(String[] args) {
OOMExample example = new OOMExample();
example.addObjects();
}
}
# OOM tezkor namoyishi uchun xotira cheklov bilan Java ishga tushirish misoli
java -Xmx64m OOMExample
OOMni oldini olish uchun:
- Kodni xotira samarali ishlash uchun optimallashtirish.
- JVM yoki bajarish muhitining xotira parametrlarini to‘g‘ri sozlash.
- Doimiy ravishda heap dump’larni tahlil qilish va profiling qilish.
- Ishlab chiqarishda xotira foydalanishini monitoring qilish.