Cara Mengatasi "Allowed Memory Size Exhausted" di WordPress
Kalau situs kamu memunculkan Fatal error: Allowed memory size of 268435456 bytes exhausted, tambahkan baris ini ke wp-config.php di atas komentar / That's all, stop editing! /
Dipublikasikan
Kalau situs kamu memunculkan Fatal error: Allowed memory size of 268435456 bytes exhausted, tambahkan baris ini ke wp-config.php tepat di atas komentar /* That's all, stop editing! */: define( 'WP_MEMORY_LIMIT', '256M' );. Cara ini biasanya membuat mayoritas situs kembali online dalam waktu kurang dari satu menit. Tapi baca dulu sisa halaman ini sebelum kamu beranjak pergi, karena menaikkan limit itu sifatnya diagnosis, bukan obat. Kalau crash-nya muncul lagi di angka yang lebih tinggi, masalah sebenarnya ada pada kode yang memakan memori tanpa batas, dan menaikkan plafon cuma memberi ruang lebih banyak buat masalah itu berkembang.
Apa arti error ini sebenarnya
PHP melacak berapa banyak memori yang dialokasikan tiap request. Ketika satu request mencoba mengalokasikan melebihi memory_limit yang diset di php.ini (atau di-override oleh WordPress), PHP langsung menghentikan request itu dengan fatal error dan mencetak jumlah byte saat dia mati. 268435456 bytes itu sama dengan 256M. 134217728 itu 128M. 536870912 itu 512M. Angka setelah “tried to allocate” menunjukkan ukuran pemicu terakhir, bukan ukuran masalahnya.
WordPress menambahkan limit-nya sendiri di atas limit PHP. WP_MEMORY_LIMIT (default 40M, atau limit PHP kalau lebih tinggi) mengatur sisi front end. WP_MAX_MEMORY_LIMIT (default 256M) mengatur operasi di sisi admin seperti media library dan update plugin, yang memang butuh lebih banyak memori. WordPress memanggil ini_set('memory_limit', ...) saat load berdasarkan konstanta ini — tapi hanya kalau hosting kamu mengizinkan ini_set, dan hanya sampai batas keras (hard cap) yang diset hosting kamu. Bagian terakhir itulah alasan kenapa mengedit wp-config.php kadang terlihat tidak berpengaruh sama sekali.
Cara mengatasinya, secara berurutan
1. Naikkan limit WordPress di wp-config.php. Ini yang pertama harus dicoba karena reversibel dan tidak menyentuh apa pun yang lain.
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
Kalau kamu tidak yakin di mana baris ini harus diletakkan atau ingin sekalian mengatur konstanta umum lainnya dengan benar, wp-config generator kami akan menuliskan blok yang rapi dan tinggal kamu paste. Penempatan itu penting — apa pun yang ada di bawah baris “stop editing” akan diabaikan.
2. Kalau itu tidak berpengaruh, berarti hosting kamu membatasi PHP. Naikkan memory_limit di level PHP. Di php.ini:
memory_limit = 256M
Di banyak shared hosting kamu tidak bisa mengedit php.ini secara langsung. Coba pakai file .user.ini di web root, atau set lewat .htaccess pada setup Apache/mod_php:
php_value memory_limit 256M
Perhatikan bahwa php_value di .htaccess akan memicu error 500 pada nginx atau setup PHP-FPM, karena itu adalah direktif Apache/mod_php. Kalau muncul 500 setelah menambahkannya, itu penyebabnya — hapus baris itu dan gunakan .user.ini.
3. Pastikan nilai yang benar-benar aktif. Jangan percaya pada apa yang kamu edit; percaya pada apa yang dilaporkan PHP. Taruh file satu baris ini di web root:
<?php echo ini_get('memory_limit');
Buka di browser, baca nilainya, lalu hapus file-nya. Kalau masih tertulis 128M setelah kamu set 256M, berarti hosting kamu meng-override-mu dan kamu perlu menghubungi mereka atau memakai pengaturan control panel mereka.
Bagian yang dilewatkan kebanyakan panduan
Menaikkan limit itu diagnosis. Berikut cara membaca hasilnya.
Kalau kamu set 256M dan situs tetap jalan di bawah traffic normal, berarti kamu memang punya plafon yang sah tapi terlalu rendah — ini umum di situs dengan media library besar, WooCommerce, atau page builder. Kamu sudah selesai.
Kalau kamu set 256M dan crash lagi, lalu 512M dan crash lagi, berhenti menaikkannya. Request WordPress yang normal tidak butuh 512M. Ketika penggunaan memori naik tanpa plafon, ada sesuatu yang looping atau menumpuk: plugin yang memuat seluruh tabel database ke dalam array, sebuah add_action yang secara rekursif memicu dirinya sendiri, rutinitas import yang menahan setiap baris di memori sekaligus, atau dua plugin yang saling berebut di dalam hook yang sama. Menaikkan limit tidak memperbaiki loop tanpa batas — itu cuma menggeser crash beberapa detik lebih lambat dan membuatnya lebih sulit direproduksi.
Untuk menemukan biang keladinya, nonaktifkan semua plugin dan ganti ke theme default seperti Twenty Twenty-Four. Kalau error-nya berhenti, aktifkan kembali satu per satu sampai error itu muncul lagi. Nyalakan debug log untuk menangkap di mana dia mati:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
Baris fatal di wp-content/debug.log menyebutkan nama file dan nomor baris yang mengalokasikan potongan memori terakhir. Itu biasanya adalah loop-nya, atau cuma satu pemanggilan fungsi dari situ.
Yang tidak boleh dilakukan
Jangan set WP_MEMORY_LIMIT ke -1 atau 1024M lalu melupakannya. Memori tak terbatas tidak memperbaiki kebocoran; itu justru membiarkan request yang liar melahap seluruh server, yang bisa merobohkan setiap situs lain di server yang sama dan membuat kamu ditelepon hosting-mu. Plafon itu fitur keamanan. Pertahankan.
Jangan paste ini_set('memory_limit', '512M') ke functions.php sebagai solusi utama. Baris itu berjalan terlalu lambat untuk sebagian kegagalan — kalau crash terjadi saat load core WordPress sebelum functions.php theme-mu dieksekusi, baris itu tidak akan pernah jalan. wp-config.php di-load lebih awal dan itu tempat yang tepat.
Jangan langsung berasumsi ini masalah hosting lalu upgrade paket. Kadang memang hosting-nya kurang mumpuni. Tapi sering kali crash yang persis sama tetap mengikutimu ke paket yang lebih besar karena penyebabnya ikut terbawa di dalam plugin-mu. Singkirkan dulu kemungkinan loop; itu gratis.
Jangan naikkan memory_limit untuk mengatasi error max_execution_time. Keduanya limit yang berbeda dengan pesan yang berbeda. Kehabisan memori berbunyi “Allowed memory size … exhausted.” Timeout berbunyi “Maximum execution time … exceeded.” Menaikkan yang salah cuma buang-buang waktu satu sore.
Masih mentok?
Kalau kamu sudah memastikan limit aktifnya benar-benar 256M atau lebih tinggi, sudah menguji dengan semua plugin mati dan theme default, dan memorinya masih tetap habis, berarti kamu punya kebocoran sungguhan yang layak dikejar di debug log, bukan plafon yang layak dinaikkan. Tangkap baris fatal-nya, catat direktori plugin mana yang ditunjuknya, dan itulah laporan bug-mu. Pastikan dulu konstanta baseline wp-config.php-mu sudah benar dengan wp-config generator supaya kamu tahu limit-nya diset di tempat yang kamu kira — lalu buka dan baca log-nya.