🧠
Hosting

"Allowed memory size exhausted": PHP xotira xatosi va uni to'g'ri hal qilish

09.11.2026
← Barcha maqolalar

Saytda biror sahifani ochganingizda oq ekran chiqsa yoki log faylida Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 20480 bytes) degan qator paydo bo'lsa, bu PHP skript o'ziga ajratilgan xotira chegarasiga yetganini bildiradi. Xatodagi birinchi son chegaraning baytlardagi qiymati: 134217728 bayt aynan 128 MB ga teng. Ikkinchi son esa skript oxirgi marta so'ragan qo'shimcha xotira hajmi, u ko'pincha juda kichik bo'ladi va asosiy muammoni ko'rsatmaydi. Bu xatoni ikki yo'l bilan hal qilish mumkin: chegarani oshirish yoki xotirani ortiqcha sarflayotgan kodni topish. Ko'p hollarda ikkalasi ham kerak bo'ladi.

memory_limit nima va nega u kerak

memory_limit bitta PHP so'rovi (bitta sahifa ochilishi yoki bitta skript ishga tushishi) foydalana oladigan eng ko'p operativ xotirani belgilaydi. Bu himoya mexanizmi: xato yozilgan sikl yoki cheksiz rekursiya serverning butun xotirasini egallab, boshqa saytlarni ham to'xtatib qo'ymasligi uchun PHP bunday skriptni o'zi to'xtatadi. Shuning uchun chegarani -1 qilib, ya'ni cheksiz qilib qo'yish yomon fikr, ayniqsa umumiy hostingda. Odatiy saytlar uchun 128 MB yetarli bo'ladi, og'ir CMS va internet do'konlar uchun 256 MB keng tarqalgan qiymat, katta import yoki rasm qayta ishlash vazifalari uchun esa vaqtincha 512 MB kerak bo'lishi mumkin.

Hozirgi qiymatni bilishning eng oddiy usuli vaqtinchalik fayl yaratishdir. Tekshirib bo'lgach, faylni albatta o'chiring, chunki phpinfo() server haqida juda ko'p ma'lumot ochib beradi:

<?php
echo ini_get('memory_limit');
// yoki to'liq ma'lumot uchun: phpinfo();

Chegarani qayerda oshirish mumkin

Qaysi usul ishlashi PHP serverda qanday rejimda ishga tushirilganiga bog'liq. Hostinglarning aksariyatida PHP alohida jarayon sifatida (PHP-FPM yoki CGI) ishlaydi, ba'zilarida esa Apache moduli sifatida. Noto'g'ri usulni tanlasangiz, sozlama yo shunchaki e'tiborsiz qoladi, yoki butun sayt 500 xato bera boshlaydi.

Hosting panelidagi PHP sozlamalari

Eng ishonchli yo'l hosting panelidan foydalanish. ISPmanager panelida har bir sayt uchun PHP versiyasi va asosiy parametrlarini, jumladan memory_limit ni o'zgartirish imkoniyati bo'ladi (qaysi parametrlar ochiqligi tarifga bog'liq bo'lishi mumkin). sayt.uz mijozlari panelga sayt.uz kabinetidagi hosting sahifasidan kiradi. Panel orqali kiritilgan qiymat to'g'ri konfiguratsiya fayliga yoziladi va PHP rejimidan qat'i nazar ishlaydi.

.user.ini fayli (PHP-FPM va CGI uchun)

Agar PHP FPM yoki CGI rejimida ishlasa, sayt papkasida .user.ini faylini yaratib, unga kerakli parametrni yozish mumkin. PHP bu faylni har safar emas, belgilangan vaqt oralig'ida qayta o'qiydi (standart holatda 300 soniya), shuning uchun o'zgarish bir necha daqiqadan keyin kuchga kiradi:

; .user.ini
memory_limit = 256M

.htaccess (faqat Apache moduli rejimida)

Internetdagi ko'plab maslahatlarda .htaccess ga php_value qatorini qo'shish tavsiya etiladi. Bu faqat PHP Apache moduli (mod_php) sifatida ishlaganda ishlaydi. FPM yoki CGI rejimida esa Apache bu ko'rsatmani tanimaydi va butun sayt 500 xato beradi. Shuning uchun bu qatorni qo'shgandan keyin sayt ishdan chiqsa, uni darhol olib tashlang va .user.ini usuliga o'ting:

# .htaccess
php_value memory_limit 256M

Kod ichida va WordPress'da

Ayrim skriptlar uchun chegarani kodning o'zida oshirish mumkin. Bu ayniqsa bitta og'ir vazifa (masalan, hisobot yaratish) uchun qulay, chunki qolgan sahifalar oddiy chegarada qoladi. Server administratori chegarani qattiq belgilagan bo'lsa, bu usul ishlamasligini unutmang:

ini_set('memory_limit', '512M');

WordPress'da xotira uchun o'zining ikkita konstantasi bor. WP_MEMORY_LIMIT saytning oddiy sahifalari uchun, WP_MAX_MEMORY_LIMIT esa admin panel va rasm qayta ishlash kabi og'irroq vazifalar uchun ishlatiladi. Ular wp-config.php faylida That's all, stop editing qatoridan oldin yoziladi. Bu konstantalar PHP'ning server chegarasidan oshib keta olmaydi, ya'ni server 128 MB bergan bo'lsa, WordPress'da 512 MB yozish natija bermaydi:

define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');

Qachon chegarani oshirish yechim emas

Agar chegarani 256 MB dan 512 MB ga, keyin 1 GB ga ko'tarsangiz-u, xato baribir qaytsa, muammo kodda. Ko'p uchraydigan sabablar quyidagilar:

Xotirani qaysi qism yeyayotganini aniqlash uchun kodning turli joylariga o'lchov qo'yish mumkin. memory_get_peak_usage(true) funksiyasi skript shu paytgacha erishgan eng yuqori xotira sarfini qaytaradi:

error_log('Xotira: ' . round(memory_get_peak_usage(true) / 1048576, 1) . ' MB');

Katta jadvallar bilan ishlaganda ma'lumotni qismlab olish xotira sarfini keskin kamaytiradi. Butun natijani massivga yig'ish o'rniga qatorlarni birma-bir o'qing yoki LIMIT va OFFSET bilan 500-1000 tadan bo'lib ishlang.

Misol: Toshkentdagi internet do'konda eksport

Toshkentdagi maishiy texnika do'koni example.uz WooCommerce'da ishlaydi va har hafta barcha mahsulotlarni Excel'ga eksport qiladi. Mahsulotlar soni 12 mingdan oshgach, eksport sahifasi Allowed memory size xatosi bilan to'xtay boshladi. Dasturchi avval panel orqali memory_limit ni 256 MB ga ko'tardi, bu vaqtincha yordam berdi. Keyin memory_get_peak_usage bilan tekshirganda eksport plagini barcha mahsulotlarni rasmlari va meta ma'lumotlari bilan birga bir vaqtda xotiraga yuklayotgani ma'lum bo'ldi. Plagin sozlamasida eksportni 500 tadan bo'laklarga bo'lish yoqilgach, sarf 90 MB atrofida barqaror qoldi va chegarani yana oshirishga ehtiyoj qolmadi.

Hosting tarifining chegarasi

Umumiy hostingda PHP sozlamasidan tashqari tarif bo'yicha umumiy xotira chegarasi ham bo'lishi mumkin. Agar memory_limit yetarli bo'lsa-yu, sayt bir vaqtda ko'p tashrif bo'lganda baribir sekinlashsa yoki xato bersa, gap bitta skriptda emas, balki bir vaqtda ishlayotgan barcha jarayonlarning umumiy sarfida bo'lishi mumkin. Bunday holatda log fayllarni ko'rib chiqish, keraksiz plaginlarni o'chirish va keshlashni yoqish birinchi qadam bo'ladi. Agar loyiha haqiqatan ham o'sgan bo'lsa, kattaroq tarif yoki VPS haqida o'ylash vaqti kelgan bo'ladi. Aniq chegaralar bo'yicha savollarni sayt.uz kabinetidan texnik yordamga tiket orqali berish mumkin.

O'xshash maqolalar

🤖 Python botni 24/7 ishlatish: systemd va PM2 bilan barqaror ishga tushirish 🧠 Xotira yetmasligi (OOM): PHP va Python jarayonlari nega o'ldiriladi 🚀 To'liq sahifa keshi: qachon foydali va qachon xalaqit beradi ⚡ FastAPI'ni serverga joylash: Uvicorn, systemd va Nginx bilan ishonchli deploy
🌐 Til
🇺🇿 O'zbek ✓ 🇺🇿 Ўзбек 🇷🇺 Русский 🇬🇧 English