• Indonesian
  • English
  • Fix PHP Memory Limit Exhausted: 7 Solusi Cepat & Anti Ulang

    Kecepatan:
    ⏱ 14 min read

    Berhenti googling “PHP memory limit exhausted” tiap minggu. Serius nih. Aku udah lihat error ini muncul di production server berkali-kali, dan tiap kali tetep bikin gemas. Error-nya selalu sama: Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes). Masalahnya selalu sama, dan sebenarnya gampang banget dicegah — kalau sampeyan mau belajar sekali aja. Tolong ya, jangan ngulang kesalahan yang sama terus-terusan.

    Bayangkan kamu lagi antre di ATM, udah 30 menit nunggu, eh pas giliran kamu, mesinnya nolak transaksi karena limit harian habis. Frustrating banget kan? Nah, PHP memory limit itu kurang lebih kayak gitu. Script kamu lagi jalan-jalan enak, query database ini itu, proses upload gambar, generate PDF, olah data CSV — eh tiba-tiba crash karena kehabisan “budget” memori. Dan kalau ini terjadi di production environment, dampaknya bukan cuma error page yang muncul di browser user. Ada revenue loss, ada trust yang runtuh, ada ticket support yang membanjir, dan kalau ini terus terjadi berulang-ulang, siap-siap terima surat cinta seko management. Soalnya ini production server, bukan environment dev yang bisa kamu restart seenaknya.

    Difficulty: Beginner
    Last Updated: Agustus 2026
    Tested On: Ubuntu 22.04/24.04, Debian 11/12, CentOS 7/8/9, cPanel WHM 118+, Plesk Obsidian, DirectAdmin, PHP 7.4/8.0/8.1/8.2/8.3, WordPress 6.x, WooCommerce, Laravel

    Kenapa Error Ini Selalu Muncul?

    PHP memory limit itu sebenarnya mekanisme proteksi. Tanpa batas ini, satu script yang rusak bisa makan seluruh RAM server dan bikin service lain mati — Apache, Nginx, MySQL, semua bisa kena. Jadi PHP kasih default limit, biasanya 128M atau 256M, dan kalau script kamu melebihi batas itu, boom — fatal error. Ini bukan bug, ini fitur. Tapi masalahnya, banyak yang gak ngerti kenapa script mereka bisa makan memori sebanyak itu.

    Common causes yang paling sering aku lihat di lapangan itu gini: pertama, upload file besar tanpa validasi ukuran — user upload gambar 10MB dari DSLR, PHP coba proses semua di memori. Kedua, WooCommerce atau plugin WordPress yang load data terlalu banyak sekaligus — misalnya order export 5000 baris langsung. Ketiga, memory leak di custom code yang gak ketahuan — script yang dijalankan berulang kali (cron job tiap menit) tapi gak pernah cleanup variable. Keempat, konfigurasi default yang terlalu rendah untuk workload server tertentu. Kelima, image processing library seperti GD atau Imagick yang makan banyak memori buat resize gambar berukuran besar. Semua ini sering terjadi di production, dan kalau gak ditangani, error ini akan muncul lagi dan lagi.

    Contoh error PHP memory limit exhausted di terminal server

    7 Solusi Fix PHP Memory Limit Exhausted Error

    Oke, saiki kita masuk ke solusi. Aku urutkan dari yang paling gampang sampai yang lebih advanced. Ikuti berurutan ya, jangan loncat-loncat. Dan yang penting: sebelum ubah config apapun, SELALU backup dulu file config yang asli. Tolong jangan skip bagian ini. Kalau kamu edit php.ini tanpa backup, dan ternyata syntax-nya salah, seluruh website bisa down. Aku pernah lihat kasus begini, dan recovery-nya butuh waktu lebih lama daripada proses backup 5 menit.

    Solusi 1: Cek Memory Limit Saat Ini

    Sebelum otak-atik apapun, cek dulu limit sekarang berapa. Jangan nebak. Banyak yang bilang “udah saya set 512M” ternyata set-nya di file yang salah, atau ada config lain yang override. Login ke server, buat file PHP info:

    cat > /var/www/html/phpinfo.php <<'EOF'
    <?php phpinfo(); ?>
    EOF

    Buka browser, akses http://domain-kamu.com/phpinfo.php, cari baris memory_limit. Catat nilainya dan catat juga path file php.ini yang aktif — biasanya ada di kolom Loaded Configuration File. Kalau udah selesai, hapus file phpinfo.php ini. Jangan biarkan publicly accessible, karena info ini bisa dimanfaatkan attacker.

    Alternatif lain, kalau kamu punya akses CLI, langsung jalanin:

    php -i | grep memory_limit

    Atau kalau mau lebih spesifik:

    php -r "echo ini_get('memory_limit');"

    Hasilnya? Misalnya 128M. Nah, kalau error message-nya bilang exhausted di angka 134217728 bytes (yang artinya 128MB), berarti memory_limit kamu memang kurang. Lanjut ke solusi berikutnya.

    Solusi 2: Edit php.ini (Permanent Fix)

    Ini solusi paling umum dan paling reliable. Edit file php.ini, naikkan memory_limit. Tapi perhatiin: kamu harus edit file php.ini yang BENAR. Ada banyak php.ini di server — satu untuk CLI, satu untuk web, dan kadang ada per-version.

    Cari file php.ini yang aktif:

    php --ini | grep "Loaded Configuration File"

    Output-nya kira-kira gini:

    Loaded Configuration File: /etc/php/8.2/fpm/php.ini

    Backup dulu, baru edit:

    cp /etc/php/8.2/fpm/php.ini /etc/php/8.2/fpm/php.ini.bak.bak
    nano /etc/php/8.2/fpm/php.ini

    Cari baris memory_limit dan ganti:

    ; Before
    memory_limit = 128M
    
    ; After
    memory_limit = 512M

    Simpan file, lalu restart PHP-FPM:

    # Untuk PHP 8.2 FPM
    systemctl restart php8.2-fpm
    
    # Atau kalau pakai PHP 7.4
    systemctl restart php7.4-fpm
    
    # Atau kalau pakai mod PHP di Apache
    systemctl restart apache2

    Setelah restart, verifikasi perubahannya:

    php -r "echo ini_get('memory_limit');"

    Harusnya sekarang tampil 512M. Kalau masih 128M, kemungkinan kamu edit file php.ini yang salah — cek lagi path-nya. Atau ada file konfigurasi lain yang override. Di beberapa distro, ada direktori /etc/php/8.2/fpm/conf.d/ yang isinya file .ini lain yang bisa override setting di php.ini utama. Cek juga situ.

    Solusi 3: Fix via .htaccess atau .user.ini

    Kalau kamu gak punya akses edit php.ini (misalnya di shared hosting), ada alternatif lain. Untuk Apache, kamu bisa pakai .htaccess:

    # Tambahkan di file .htaccess di root website
    php_value memory_limit 512M

    Atau kalau pakai LiteSpeed/Nginx dengan .user.ini support:

    # Buat atau edit file .user.ini di root website
    memory_limit = 512M

    Catatan penting: .htaccess hanya works di Apache dengan mod_php atau suPHP. Kalau kamu pakai PHP-FPM + Nginx, .htaccess gak akan di-read — kamu harus pakai .user.ini atau edit php.ini langsung. Dan kalau pakai LiteSpeed, .user.ini otomatis di-cache, jadi setelah edit kamu perlu tunggu beberapa menit atau restart LiteSpeed.

    Juga perlu diketahui: beberapa shared hosting gak mengizinkan override memory_limit pakai .htaccess karena limit server-side udah di-lock oleh admin. Kalau kamu edit .htaccess tapi error tetap muncul, kemungkinan besar hosting kamu gak ngizinin override ini. Solusinya? Hubungi provider hosting, atau naikkan ke VPS biar lebih bebas konfigurasi. Soalnya di shared hosting, kamu berbagi resources sama user lain, jadi wajar kalau ada batasan.

    Solusi 4: Fix Khusus WordPress

    WordPress itu salah satu CMS yang paling sering kena PHP memory limit error. Terutama kalau pakai WooCommerce, Elementor, atau plugin berat lainnya. Fix-nya bisa dilakukan di wp-config.php:

    // Buka file wp-config.php, cari atau tambahkan baris ini
    define('WP_MEMORY_LIMIT', '512M');
    define('WP_MAX_MEMORY_LIMIT', '512M');

    Taruh di atas baris /* That's all, stop editing! */. WP_MEMORY_LIMIT itu buat frontend, WP_MAX_MEMORY_LIMIT itu buat admin backend. Biasanya backend butuh lebih banyak karena proses upload media, import data, dll.

    Tapi perlu diingat: fix ini cuma work kalau PHP di server kamu mengizinkan limit di atas yang kamu set. Misalnya kalau php.ini memory_limit = 128M, dan kamu set WP_MEMORY_LIMIT = 512M, tetap aja gak akan jalan karena PHP gak akan mengizinkan script makan lebih dari 128M. Jadi harus dua-duanya di-set: php.ini DAN wp-config.php. Banyak yang lupa bagian ini, terus heran kok tetap error.

    Cara lain yang bisa dicoba untuk WordPress: nonaktifkan plugin satu per satu untuk cari tahu plugin mana yang makan banyak memori. Kadang masalahnya bukan di memory limit yang kurang, tapi di plugin yang leak memory. Mulai dari plugin yang paling “berat” — biasanya page builder, WooCommerce extensions, atau plugin analytics. Nonaktifkan satu per satu, test, dan lihat apakah error masih muncul.

    Solusi 5: Pakai ini_set() Per-Script

    Kalau kamu cuma butuh naikkan memory limit untuk script tertentu (bukan global), bisa pakai ini_set() di awal script:

    <?php
    ini_set('memory_limit', '512M');
    
    // Sisa kode script kamu di sini
    // ...

    Cara ini bagus untuk script cron job atau batch processing yang memang butuh banyak memori, tapi kamu gak mau naikkan limit global karena alasan keamanan. Ingat, memory limit itu proteksi. Kalau kamu naikkan global ke 2G, satu script nakal aja bisa makan semua RAM server dan bikin service lain mati. Jadi untuk script tertentu, pakai ini_set() aja. Tapi ini cuma works kalau php.ini mengizinkan per-script override — cek setting allow_url_fopen dan pastikan gak ada restriction lain.

    Oh ya, satu lagi yang sering dilupakan: ini_set() cuma bisa menurunkan memory limit, bukan menaikkannya, KECUALI php.ini udah set lebih tinggi. Artinya kalau php.ini = 128M, kamu gak bisa set 512M lewat ini_set(). Tapi kalau php.ini = 2G, kamu bisa set 512M dari script untuk batasi script tertentu. Ini yang banyak gak diketahui developer junior.

    Solusi 6: Profiling — Cari Kode yang Boros Memori

    Nah, ini yang paling sering dilupakan tapi sebenarnya paling penting. Daripada terus naikkan memory limit, kenapa gak cari aja kode yang boros memori dan fix dari akarnya? Karena kalau kamu terus naikkan limit, suatu saat kamu akan sampai di batas RAM server, dan solusinya cuma upgrade hardware — yang artinya biaya lebih.

    Cara profiling memori di PHP:

    <?php
    // Di awal script
    echo 'Memory usage: ' . memory_get_usage() . ' bytesn';
    
    // ... kode kamu di sini ...
    
    // Di akhir script
    echo 'Peak memory usage: ' . memory_get_peak_usage() . ' bytesn';

    Atau kalau mau lebih detail, pakai Xdebug profiler. Install Xdebug, aktifkan profiling, dan analisis hasilnya pakai tools seperti KCachegrind atau QCachegrind. Output-nya bakal kasih tahu kamu function mana yang paling banyak makan memori dan berapa lama execution time-nya.

    Tanda-tanda kode yang boros memori itu gini: loop yang load semua data sekaligus dari database tanpa pagination, variable besar yang gak di-unset setelah dipakai, string concatenation di dalam loop yang bikin string makin lama makin besar, atau penggunaan image processing yang gak di-optimize. Contohnya: kamu load 10.000 row dari database ke array, terus proses satu per satu. Semua 10.000 row itu nongkrong di memori sekaligus. Padahal bisa pakai pagination atau generator function supaya cuma load 100 row dalam satu waktu.

    Solusi 7: Optimasi Server-Level

    Kalau semua solusi di atas udah dicoba tapi error masih muncul, mungkin masalahnya bukan di script tertentu tapi di konfigurasi server secara keseluruhan. Beberapa hal yang bisa dioptimasi:

    OPcache: Aktifkan OPcache kalau belum aktif. OPcache caching bytecode PHP, jadi script gak perlu di-parse ulang setiap request. Ini mengurangi memory usage secara signifikan. Edit php.ini:

    opcache.enable=1
    opcache.memory_consumption=128
    opcache.interned_strings_buffer=16
    opcache.max_accelerated_files=10000

    PHP-FPM tuning: Kalau pakai PHP-FPM, pastikan pm.max_children di-set dengan tepat. Terlalu banyak child processes = terlalu banyak memory yang terpakai. Formula kasar: max_children = (Total RAM – RAM untuk OS/MySQL/other services) / RAM per PHP process. Kamu bisa cek berapa memory per process pakai ps aux | grep php-fpm.

    Switch ke LiteSpeed: Kalau server kamu pakai Apache, pertimbangkan switch ke LiteSpeed. LiteSpeed lebih efisien dalam hal memory usage karena event-driven architecture. Banyak yang report penurunan memory usage 30-50% setelah switch ke LiteSpeed, dan ini langsung mengurangi frekuensi PHP memory limit error. Artikel tentang migrasi Apache ke LiteSpeed udah banyak, tapi kalau kamu butuh panduan spesifik, cek juga konfigurasi migrasi dari Apache ke LiteSpeed yang udah kami tulis.

    Troubleshooting Table

    Nih, tabel cepat buat diagnose masalah kamu. Cocokin error message kamu sama situasi di tabel, terus ikuti solusinya.

    Error Message Pattern Kemungkinan Penyebab Solusi Utama Prioritas
    Allowed memory size of 128M exhausted Default limit terlalu rendah Naikkan di php.ini Tinggi
    Allowed memory size of 256M exhausted Limit udah dinaikkan tapi belum cukup Cari kode boros memori + naikkan lagi Tinggi
    Allowed memory size of 512M exhausted Script yang sangat berat atau memory leak Profiling + optimasi kode Sangat Tinggi
    Error muncul hanya di halaman tertentu Plugin/halaman spesifik bermasalah Nonaktifkan plugin satu per satu Sedang
    Error muncul di cron job saja Batch processing butuh lebih banyak RAM ini_set() di awal script cron Sedang
    Error muncul saat upload file File terlalu besar, PHP coba load di memori Naikkan upload_max_filesize + memory_limit Tinggi
    Error muncul setelah update PHP version PHP baru lebih strict, config lama gak kompatibel Re-check semua config php.ini Tinggi

    Nilai Memory Limit yang Direkomendasikan

    Bingung mau set berapa? Ini rekomendasi berdasarkan tipe website dan workload:

    Tipe Website/App Memory Limit Minimum Rekomendasi Catatan
    Blog WordPress sederhana 128M 256M Cukup untuk theme ringan + 5-10 plugin
    WooCommerce toko online 256M 512M Plugin WooCommerce + payment gateway + shipping
    Laravel/Ci4 application 128M 256M-512M Tergantung kompleksitas query dan queue
    Image processing 256M 512M-1G GD/Imagick makan banyak untuk resize
    Import/Export CSV besar 256M 512M-2G Data besar di-memori, pertimbangkan chunking
    Multisite WordPress 256M 512M Shared memory antar site
    Shared hosting 64M-128M 256M Tergantung limit provider

    Konfigurasi memory_limit di file php.ini pada server VPS

    Kenapa Naikkan Memory Limit Saja Gak Cukup

    Ini yang mau aku tekankan. Banyak yang langsung lompat ke “naikkan memory limit” tanpa mikir kenapa script-nya makan banyak memori di tempat pertama. Dan ya, itu bikin pusing karena suatu saat kamu akan sampai di batas. Kalau php.ini udah di-set 2G tapi masih error, kamu gak bisa naikkan lagi kecuali upgrade RAM server — yang berarti biaya tambahan. Jadi solusi yang paling sustainable itu: naikkan limit SEBAGAI FIX SEMENTARA, tapi SEKALIGUS cari dan fix kode yang boros memori sebagai fix permanen.

    Contoh nyata: kemarin aku handle kasus di mana WooCommerce order export bikin error memory limit. User set memory_limit ke 1G, error masih muncul. Ternyata plugin export-nya load semua order ke array sekaligus — 15.000 order, masing-masing dengan 20+ meta fields. Fix-nya bukan naikkan memory limit lebih tinggi, tapi ganti logic export-nya pakai generator function yang proses 100 order per batch. Hasilnya? Memory usage turun dari 1.2GB ke 64MB. Fix yang bener itu di kode, bukan di config.

    Artikel terkait yang mungkin berguna: kalau kamu lagi handle masalah WordPress yang lebih luas, cek juga panduan optimasi WordPress di VPS dan cara cepat fix error 500 di WordPress. Karena sering kali masalah memory limit ini muncul barengan sama error-error lain di WordPress.

    FAQ

    Q: Apa beda memory_limit di php.ini vs .htaccess vs .user.ini?

    Di php.ini itu setting global yang apply ke semua website di server (atau per PHP version). Di .htaccess itu per-directory, cuma berlaku di direktori tempat file .htaccess itu diletakkan dan subdirektorinya, DAN cuma works di Apache dengan mod_php. Di .user.ini itu juga per-directory tapi untuk PHP-FPM/LiteSpeed, dan biasanya di-cache beberapa menit. Prioritasnya: .user.ini/.htaccess > php.ini. Jadi kalau kamu set 512M di .user.ini tapi php.ini cuma 128M, tetap aja 512M yang berlaku — ASAL php.ini gak lock limit-nya. Beberapa server admin sengaja lock limit di php.ini pakai memory_limit = 128M tanpa tanda titik dua (bukan comment), jadi override dari .user.ini gak akan work.

    Q: Kenapa error ini muncul padahal saya sudah set memory_limit tinggi?

    Beberapa kemungkinan: Pertama, kamu edit file php.ini yang salah. Ada banyak php.ini — cek dengan php --ini untuk tahu yang aktif. Kedua, ada config lain yang override — cek direktori /etc/php/X.Y/fpm/conf.d/ atau /etc/php/X.Y/cli/conf.d/. Ketiga, kalau di shared hosting, provider mungkin udah lock limit di server-side dan gak mengizinkan override. Keempat, kalau WordPress, kamu perlu set juga di wp-config.php — cuma di php.ini belum cukup karena WordPress punya batas internal sendiri. Kelima, kalau pakai PHP-FPM, pastikan kamu restart service-nya setelah edit php.ini. Banyak yang edit tapi lupa restart, terus heran kok gak berubah.

    Q: Apakah aman menaikkan memory_limit ke 1G atau lebih?

    Aman ASAL kamu tahu kenapa kamu melakukannya dan punya alasan yang jelas. Kalau kamu naikkan ke 1G karena WooCommerce memang butuh, dan server kamu punya RAM 4-8GB, itu wajar. Tapi kalau kamu naikkan ke 1G karena malas fix kode yang bocor memori, itu masalah baru. Karena satu PHP process yang makan 1G bisa bikin process lain kehabisan RAM. Hitung dulu: kalau server punya 4GB RAM, dan kamu set memory_limit 1G, berarti maximal 4 concurrent PHP processes yang bisa jalan — dan itu belum termasuk MySQL, OS, dan service lain. Jadi set secara bijak, dan monitor memory usage secara berkala pakai tools seperti htop atau free -m.

    Q: Apakah memory leak di PHP itu nyata atau cuma masalah configuration?

    Keduanya bisa terjadi. Memory leak di PHP itu nyata meskipun PHP punya garbage collector. Beberapa penyebab: reference antar objects yang gak di-break, closure yang capture variable dari parent scope tanpa perlu, atau penggunaan static variable di function yang di-call berulang kali. Tapi yang paling sering itu bukan leak murni, melainkan script yang memang butuh banyak memori karena cara kerjanya — misalnya load seluruh database ke array. Jadi sebelum curiga leak, cek dulu apakah script-nya memang dirancang untuk handle data sebanyak itu di memori.

    Author: Syslog Solutions — NOC & Server Management Team. We handle 500+ servers daily, from shared hosting to enterprise dedicated infrastructure.

    Take it seriously ya. PHP memory limit exhausted itu error yang kelihatannya sepele tapi dampaknya bisa besar kalau terjadi di production. Jangan cuma naikkan limit dan bilang “udah fix” — cari tahu kenapa script-nya makan banyak memori, fix dari akarnya, dan monitor supaya gak terulang. Sebelum close ticket, pastiin kamu udah: 1) cek log error, 2) verifikasi memory_limit aktual, 3) tes di staging sebelum apply ke production, 4) monitor memory usage setelah perubahan. Done.