Server Solusi – Ketika website menampilkan pesan Allowed memory size of ... bytes exhausted, masalahnya bukan selalu karena RAM VPS sudah penuh. Error tersebut biasanya menunjukkan bahwa satu proses PHP telah mencapai batas memori yang diizinkan oleh konfigurasi PHP.
Masalah ini dapat muncul ketika membuka halaman WordPress, menjalankan perintah Artisan Laravel, memproses file besar, mengimpor data, atau mengeksekusi script yang menggunakan terlalu banyak memori. Dampaknya bisa berupa halaman error 500, proses background yang gagal, atau pekerjaan terjadwal yang berhenti sebelum selesai.
Dalam troubleshooting, saya akan memisahkan dua hal yang sering dianggap sama: batas memori PHP (memory_limit) dan kapasitas RAM VPS secara keseluruhan. Keduanya berkaitan, tetapi penanganannya berbeda. Karena belum ada log error atau konfigurasi server yang diberikan, panduan ini menggunakan contoh umum yang perlu kamu sesuaikan dengan lingkungan VPS milikmu.
Bagaimana Mengatasi PHP Memory Exhausted?
Cara mengatasi PHP memory exhausted di VPS adalah membaca pesan error dan log untuk mengetahui script yang kehabisan memori, memeriksa nilai memory_limit yang benar-benar digunakan oleh proses PHP, lalu menentukan apakah batas tersebut perlu disesuaikan atau penggunaan memori aplikasinya perlu diperbaiki.
Jika aplikasi memang membutuhkan memori lebih besar, kamu bisa menaikkan memory_limit secara terukur. Namun, jika satu proses terus menggunakan memori secara berlebihan, menaikkan batas tanpa memeriksa penyebabnya dapat membuat lebih banyak proses mengonsumsi RAM dan berisiko membebani VPS.
Urutan pemeriksaan yang aman adalah:
Baca pesan error dan temukan file atau proses yang bermasalah.
Periksa
memory_limitpada PHP yang digunakan website atau CLI.Periksa RAM dan penggunaan memori proses di VPS.
Perbaiki script atau sesuaikan batas PHP berdasarkan kebutuhan aplikasi.
Uji kembali proses yang sebelumnya gagal dan pantau log.
Memahami Penyebab PHP Memory Exhausted
Pesan error yang umum ditemukan kurang lebih seperti ini:
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted(tried to allocate 8192 bytes)Angka pada pesan tersebut adalah contoh, bukan hasil pengujian server tertentu. Nilai 134217728 byte setara dengan 128 MiB. Pesan itu menunjukkan bahwa proses PHP telah mencapai batas memori yang diizinkan dan gagal memenuhi permintaan alokasi tambahan.

Ada beberapa penyebab yang perlu dibedakan.
Batas memory_limit terlalu rendah
PHP memiliki pengaturan memory_limit untuk membatasi jumlah memori yang dapat digunakan oleh satu script. Jika script membutuhkan lebih banyak memori daripada batas tersebut, PHP dapat menghentikan eksekusinya dengan fatal error.
Kondisi ini bisa terjadi pada aplikasi yang memang membutuhkan pemrosesan data besar, tetapi bisa juga menandakan script yang kurang efisien.
Script memuat terlalu banyak data sekaligus
Contohnya, aplikasi mengambil ratusan ribu baris dari database lalu menyimpan semuanya dalam array PHP. Pemrosesan file CSV berukuran besar, manipulasi gambar, dan ekspor laporan juga bisa menghabiskan memori apabila dilakukan sekaligus.
Pada kasus seperti ini, menaikkan memory_limit mungkin membantu sementara, tetapi pemrosesan bertahap biasanya lebih efisien.
Plugin atau kode aplikasi menggunakan memori berlebihan
Di WordPress, error dapat berasal dari plugin, tema, atau proses impor. Di Laravel, penyebabnya bisa berupa query yang mengambil terlalu banyak data, pemrosesan collection besar, atau job yang memuat seluruh dataset ke memori.
Jangan langsung menyimpulkan plugin atau framework tertentu sebagai penyebab sebelum memeriksa file dan baris yang tercantum dalam log.
Terlalu banyak proses PHP berjalan bersamaan
memory_limit berlaku pada tingkat script PHP, sedangkan RAM VPS digunakan bersama oleh PHP-FPM, database, web server, sistem operasi, dan proses lainnya.
Sebagai contoh, menaikkan memory_limit menjadi 512 MiB tidak berarti setiap proses akan langsung menggunakan 512 MiB. Namun, proses yang benar-benar membutuhkan memori dalam jumlah besar bisa menggunakannya, sehingga beberapa proses berat yang berjalan bersamaan berpotensi menghabiskan RAM.
Konfigurasi PHP CLI dan PHP-FPM berbeda
Perintah php di terminal biasanya menggunakan konfigurasi PHP CLI. Website yang berjalan melalui Nginx dan PHP-FPM menggunakan konfigurasi untuk layanan PHP-FPM yang aktif.
Akibatnya, nilai memory_limit yang terlihat saat menjalankan perintah terminal belum tentu sama dengan nilai yang digunakan website. Ini merupakan salah satu hal pertama yang perlu diperiksa sebelum mengubah konfigurasi.
Diagnosis: Temukan Proses PHP yang Kehabisan Memori
Sebelum mengubah konfigurasi, cari tahu proses mana yang gagal dan berapa batas memori yang sedang digunakan.

Langkah 1: Periksa log error PHP atau aplikasi
Lokasi log bergantung pada sistem operasi, versi PHP, web server, dan panel hosting. Pada VPS Ubuntu dengan Nginx dan PHP-FPM, kamu dapat memulai dari log aplikasi serta log PHP-FPM.
Untuk Laravel, masuk ke direktori proyek lalu jalankan:
tail -n 100 storage/logs/laravel.logPerintah ini menampilkan 100 baris terakhir log Laravel. Cari pesan Allowed memory size exhausted dan perhatikan nama file, nomor baris, serta proses yang sedang dijalankan.
Jika error terjadi pada WordPress, periksa log PHP atau error log yang dikonfigurasi pada hosting. Jangan mengaktifkan tampilan error PHP kepada pengunjung di website produksi karena informasi tersebut dapat membocorkan path file dan detail internal aplikasi.
Jika lokasi log PHP belum diketahui, lanjutkan dengan memeriksa konfigurasi PHP dan PHP-FPM.
Langkah 2: Periksa versi dan konfigurasi PHP CLI
Jalankan perintah berikut:
php -vphp --iniphp -i | grep -E 'memory_limit|Loaded Configuration File'Fungsi masing-masing perintah:
php -vmenampilkan versi PHP CLI.php --inimenunjukkan file konfigurasi yang dibaca oleh PHP CLI.php -imenampilkan informasi konfigurasi, termasuk nilaimemory_limit.
Jika nilai yang terlihat berbeda dengan kebutuhan aplikasi, jangan langsung mengubah file konfigurasi CLI. Pastikan terlebih dahulu apakah error berasal dari perintah terminal atau permintaan website melalui PHP-FPM.
Langkah 3: Periksa konfigurasi PHP-FPM
Untuk website yang menggunakan PHP-FPM, periksa service yang aktif. Nama service berbeda menurut versi PHP dan distribusi Linux.
Di Ubuntu, kamu dapat mencari service PHP-FPM yang tersedia dengan:
systemctl list-units --type=service --all | grep -E 'php.*fpm'Jika hasilnya menunjukkan, misalnya, php8.3-fpm.service, periksa statusnya:
systemctl status php8.3-fpmGanti nama service dengan yang benar-benar tersedia di VPS kamu.
Perintah ini membantu memastikan apakah PHP-FPM aktif, tetapi status service yang normal tidak menjamin bahwa script aplikasi bebas dari masalah memori.
Periksa pula konfigurasi pool PHP-FPM. Pengaturan seperti php_admin_value[memory_limit] dapat menentukan batas memori untuk pool tertentu dan tidak dapat ditimpa menggunakan ini_set() dari script.

Langkah 4: Periksa penggunaan RAM VPS
Jika error muncul berulang kali atau disertai website lambat, periksa apakah RAM VPS ikut tertekan.
free -hPerhatikan kolom available, bukan hanya angka free. Linux menggunakan sebagian RAM untuk cache yang dapat dilepas ketika dibutuhkan, sehingga RAM free yang kecil tidak otomatis berarti server kehabisan memori.
Untuk melihat proses yang paling banyak menggunakan memori:
ps aux --sort=-%mem | head -n 15Perintah ini menampilkan proses dengan penggunaan memori relatif tinggi. Perhatikan proses PHP-FPM, worker queue, database, serta aplikasi lain yang berjalan bersamaan.
Jika kamu menduga sistem pernah mengalami kondisi kehabisan memori hingga kernel menghentikan proses, periksa log kernel:
sudo journalctl -k --since "1 hour ago" | grep -Ei 'out of memory|oom|killed process'Jika ada pesan OOM (Out of Memory), artinya sistem mengalami tekanan memori yang cukup berat hingga mekanisme kernel dapat menghentikan proses. Ini berbeda dari fatal error memory_limit, yang dikeluarkan oleh PHP saat script mencapai batasnya.
Tidak munculnya pesan OOM juga tidak membuktikan bahwa penggunaan RAM selalu normal. Error PHP bisa terjadi meskipun RAM VPS secara keseluruhan masih tersedia.
Cara Mengatasi PHP Memory Exhausted di VPS
Setelah mengetahui sumber masalah, pilih solusi sesuai hasil diagnosis. Hindari langsung menaikkan batas memori untuk semua aplikasi jika hanya satu proses yang bermasalah.
Solusi 1: Naikkan memory_limit secara terukur
Jika log menunjukkan script membutuhkan memori lebih besar dan penggunaan tersebut memang wajar, kamu dapat menaikkan memory_limit.
Sebagai contoh, jika batas saat ini 128 MiB, kamu dapat menguji nilai 256 MiB untuk proses yang membutuhkan kapasitas lebih besar. Angka tersebut hanya contoh; nilai yang tepat bergantung pada kebutuhan aplikasi dan kapasitas VPS.
Pada Ubuntu, lokasi php.ini biasanya berbeda untuk PHP CLI dan PHP-FPM. Periksa hasil php --ini untuk CLI, kemudian cari file konfigurasi FPM dari paket PHP yang terpasang atau konfigurasi pool yang aktif.
Di file php.ini yang sesuai, cari baris:
memory_limit = 256MJika sebelumnya terdapat nilai lain, sesuaikan baris tersebut. Simpan salinan konfigurasi sebelum mengedit agar perubahan dapat dikembalikan jika menimbulkan masalah.
Jangan menetapkan memory_limit = -1 secara sembarangan pada website produksi. Nilai -1 berarti PHP tidak membatasi memori melalui direktif tersebut, sehingga script yang bermasalah dapat menghabiskan lebih banyak RAM. PHP sendiri menjelaskan bahwa batas ini berfungsi untuk mencegah script menggunakan seluruh memori server.
Setelah mengubah konfigurasi PHP-FPM, validasi dan muat ulang service yang sesuai. Pada instalasi PHP-FPM yang mendukung opsi -t, contohnya:
sudo php-fpm8.3 -tGunakan nama binary sesuai versi yang terpasang. Jika konfigurasi valid, lakukan reload service yang benar-benar digunakan website:
sudo systemctl reload php8.3-fpmReload dapat memengaruhi pemrosesan request yang sedang berjalan, tergantung kondisi layanan. Lakukan pada waktu yang sesuai untuk website produksi dan pastikan nama service benar.
Periksa kembali log dan ulangi proses yang sebelumnya gagal. Jika error hilang tetapi penggunaan RAM meningkat tajam, evaluasi kembali apakah peningkatan batas memang solusi yang tepat.
Solusi 2: Atur batas memori khusus untuk proses tertentu
Tidak semua script membutuhkan batas memori yang sama. Website dengan request biasa mungkin cukup menggunakan batas yang lebih rendah, sementara proses impor atau pembuatan laporan membutuhkan memori lebih besar.
Jika proses tersebut dijalankan melalui PHP CLI, kamu dapat mengatur batasnya hanya untuk satu eksekusi:
php -d memory_limit=512M artisan nama:perintahGanti nama:perintah dengan perintah Artisan yang benar. Contoh ini hanya berlaku untuk eksekusi CLI tersebut, bukan otomatis mengubah konfigurasi PHP-FPM pada website.
Untuk proses web, batas dapat ditentukan melalui konfigurasi pool PHP-FPM atau pengaturan aplikasi yang diizinkan oleh lingkungan hosting. Perubahan pada pool harus dilakukan dengan hati-hati karena pengaturan yang salah bisa memengaruhi seluruh request yang menggunakan pool tersebut.
Jika kamu memakai panel hosting seperti CyberPanel atau panel lain, gunakan pengaturan versi PHP dan website yang benar. Jangan berasumsi bahwa mengedit satu php.ini akan mengubah seluruh versi PHP yang terpasang.
Solusi 3: Optimalkan query dan pemrosesan data di Laravel
Jika error muncul saat aplikasi memproses banyak data, periksa apakah kode memuat seluruh data ke memori sekaligus.
Contoh yang berpotensi berat:
$users = User::all();foreach ($users as $user) {// Proses setiap pengguna.}User::all() mengambil seluruh record yang cocok dari tabel ke dalam collection. Jika tabel berisi sangat banyak record atau setiap model memiliki relasi dan data tambahan, penggunaan memori dapat meningkat tajam.
Untuk pekerjaan yang tidak membutuhkan seluruh data sekaligus, gunakan pemrosesan bertahap:
User::query()->chunk(200, function ($users) {foreach ($users as $user) {// Proses setiap kelompok pengguna.}});Dengan chunk(200), Laravel memproses data dalam kelompok berisi hingga 200 model pada satu waktu. Sesuaikan ukuran kelompok dengan kompleksitas pekerjaan.
Laravel mendokumentasikan chunk() sebagai pendekatan untuk mengurangi penggunaan memori saat memproses kumpulan record yang besar. Untuk proses yang memperbarui data berdasarkan ID, pertimbangkan chunkById() jika sesuai dengan kebutuhan query.
Perhatikan pula hal berikut:
Hindari mengambil kolom yang tidak dibutuhkan.
Batasi hasil query dengan kondisi yang relevan.
Hindari menampung seluruh hasil proses ke array jika tidak diperlukan.
Periksa apakah relasi Eloquent dimuat secara berlebihan.
Untuk ekspor data besar, tulis hasil secara bertahap ke file atau stream jika sesuai.
Menggunakan chunk() tidak otomatis menyelesaikan semua kasus. Jika callback tetap menumpuk setiap hasil ke dalam array global, penggunaan memori bisa tetap meningkat.
Solusi 4: Perbaiki pemrosesan gambar atau file besar
Pemrosesan gambar, PDF, arsip, dan CSV bisa memerlukan memori jauh lebih besar daripada ukuran file di disk.
Misalnya, gambar terkompresi berukuran beberapa megabyte dapat membutuhkan ruang memori lebih besar ketika didekode menjadi bitmap. Karena itu, jangan hanya melihat ukuran file saat memperkirakan kebutuhan memori.
Jika error muncul saat upload atau manipulasi gambar:
Identifikasi file yang sedang diproses dan library yang digunakan.
Periksa apakah script memuat banyak file sekaligus.
Proses file satu per satu jika memungkinkan.
Gunakan ukuran gambar atau batch yang lebih kecil untuk pengujian.
Pastikan proses melepaskan referensi objek besar ketika sudah tidak diperlukan.
Menaikkan memory_limit dapat menjadi bagian dari solusi jika kebutuhan memori memang wajar. Namun, untuk pemrosesan file dalam jumlah besar, membatasi jumlah data yang diproses sekaligus sering kali lebih aman daripada meningkatkan batas tanpa perhitungan.
Solusi 5: Periksa plugin dan tema WordPress
Jika error hanya muncul pada halaman atau tindakan tertentu di WordPress, periksa log untuk menemukan file yang terlibat. Jangan langsung menonaktifkan semua plugin di website produksi karena tindakan tersebut dapat mengganggu fungsi penting.
Lakukan diagnosis dengan urutan berikut:
Catat waktu error dan tindakan yang memicunya.
Periksa nama plugin, tema, atau file yang muncul dalam log.
Periksa pembaruan terbaru yang bertepatan dengan munculnya error.
Uji perubahan pada staging jika tersedia.
Nonaktifkan atau ganti komponen yang dicurigai secara terkontrol setelah membuat backup.
WordPress memiliki konstanta seperti WP_MEMORY_LIMIT dan, pada kondisi tertentu, WP_MAX_MEMORY_LIMIT. Namun, nilai yang diminta oleh WordPress tidak selalu menjadi batas efektif PHP karena konfigurasi server dapat membatasi atau mengatur ulang nilainya.
Jika perlu mengubah batas memori WordPress, periksa juga konfigurasi PHP-FPM yang benar-benar digunakan situs. Jangan menganggap perubahan wp-config.php saja pasti mengatasi error.
Solusi 6: Sesuaikan PHP-FPM dengan kapasitas RAM VPS
Jika pemeriksaan menunjukkan banyak worker PHP-FPM berjalan bersamaan dan RAM hampir habis, menaikkan memory_limit untuk semua request justru dapat memperbesar risiko.
Periksa konfigurasi pool PHP-FPM, terutama parameter seperti:
pmpm.max_childrenpm.start_serverspm.min_spare_serverspm.max_spare_servers
Parameter tersebut mengatur cara PHP-FPM membuat dan mengelola worker. pm.max_children membatasi jumlah child process yang dapat melayani request secara bersamaan pada pool yang menggunakan pengaturan tersebut.
Jangan menetapkan pm.max_children hanya berdasarkan jumlah core CPU atau nilai RAM total. Setiap worker dapat memiliki penggunaan memori yang berbeda, dan VPS juga perlu menyisakan RAM untuk sistem operasi, database, web server, serta proses lain.
Gunakan data penggunaan memori aktual ketika website sedang menjalankan beban yang mewakili kondisi normal. Setelah mengubah konfigurasi pool, validasi sintaks sebelum reload dan pantau RAM serta waktu respons website.
Verifikasi Setelah Perbaikan
Perbaikan baru dapat dinilai setelah proses yang sebelumnya gagal dijalankan kembali dan penggunaan memori diperiksa. Jangan menganggap error selesai hanya karena konfigurasi berhasil disimpan.
Periksa nilai memory_limit yang aktif
Untuk PHP CLI:
php -r 'echo ini_get("memory_limit"), PHP_EOL;'Perintah ini menampilkan batas memori untuk PHP CLI yang dipanggil dari terminal tersebut.
Untuk PHP-FPM, nilai CLI bukan bukti bahwa website menggunakan batas yang sama. Periksa konfigurasi pool dan nilai efektif pada lingkungan web melalui mekanisme diagnostik yang aman.
Jika kamu membuat halaman diagnostik sementara, batasi aksesnya dan hapus setelah selesai. Hindari meninggalkan file phpinfo() yang dapat menampilkan detail konfigurasi server kepada publik.
Ulangi proses yang sebelumnya gagal
Jalankan kembali perintah Artisan, proses impor, atau tindakan website yang sebelumnya memicu error. Jika proses selesai tanpa fatal error, periksa log terbaru untuk memastikan tidak ada error lain yang muncul.
Untuk aplikasi Laravel, kamu dapat memantau log menggunakan:
tail -f storage/logs/laravel.logTekan Ctrl+C untuk menghentikan pemantauan. Perintah tersebut hanya menampilkan log yang ditambahkan selama proses berjalan; ia tidak memperbaiki error dengan sendirinya.
Pantau penggunaan RAM setelah perubahan
free -hps aux --sort=-%mem | head -n 15Perhatikan apakah RAM tersedia masih memadai dan apakah proses PHP terus meningkat penggunaan memorinya. Jika fatal error sudah hilang tetapi VPS mulai mengalami tekanan RAM atau proses lain terhenti, solusi perlu dievaluasi kembali.
Pencegahan agar Error Tidak Terulang
Beberapa langkah berikut membantu menjaga penggunaan memori PHP tetap terkendali:
Catat konfigurasi awal. Simpan salinan
php.inidan konfigurasi pool PHP-FPM sebelum melakukan perubahan.Pantau log aplikasi. Periksa fatal error secara berkala, terutama setelah deployment, pembaruan plugin, atau perubahan kode.
Uji pemrosesan data besar. Gunakan dataset yang mendekati kondisi produksi saat menguji impor, ekspor, dan laporan.
Gunakan pemrosesan bertahap. Hindari memuat seluruh data ke memori jika bisa diproses per kelompok.
Batasi worker sesuai kapasitas VPS. Perhitungkan kebutuhan memori PHP-FPM bersama database dan layanan lain.
Pisahkan pekerjaan berat dari request web. Proses impor atau laporan yang lama dapat dipindahkan ke queue atau job background jika arsitektur aplikasi mendukungnya.
Uji konfigurasi sebelum reload. Pastikan file konfigurasi valid dan lakukan perubahan secara terkontrol.
Jika error terjadi berulang pada satu script meskipun batas memori sudah memadai, fokuskan pemeriksaan pada pola pemrosesan data dan penggunaan memori aplikasi. Menaikkan batas berkali-kali tanpa menemukan penyebab dapat menutupi masalah yang sebenarnya.
FAQ
Apa arti PHP Fatal error Allowed memory size exhausted?
Pesan tersebut berarti script PHP telah mencapai batas memori yang diizinkan oleh konfigurasi PHP dan gagal mengalokasikan memori tambahan. Penyebabnya dapat berupa batas terlalu rendah atau script yang menggunakan memori berlebihan.
Berapa memory_limit yang ideal untuk VPS?
Tidak ada satu nilai yang cocok untuk semua VPS. Kebutuhannya bergantung pada aplikasi, jenis pekerjaan, jumlah proses yang berjalan bersamaan, dan kapasitas RAM. Mulai dari kebutuhan aplikasi yang terukur dan pantau dampaknya sebelum menaikkan batas.
Apakah menaikkan memory_limit bisa membuat VPS kehabisan RAM?
Bisa meningkatkan risikonya. Batas yang lebih tinggi memungkinkan satu script menggunakan lebih banyak memori. Jika banyak worker menjalankan pekerjaan berat secara bersamaan, total penggunaan RAM dapat meningkat dan mengganggu layanan lain.
Mengapa memory_limit PHP CLI berbeda dengan website?
PHP CLI dan PHP-FPM dapat menggunakan file php.ini atau pengaturan pool yang berbeda. Periksa konfigurasi masing-masing lingkungan karena perubahan pada CLI tidak otomatis mengubah batas memori untuk request website.
Bagaimana mengatasi PHP memory exhausted di Laravel?
Periksa log Laravel untuk menemukan file dan baris yang memicu error. Jika masalah berkaitan dengan query besar, pertimbangkan chunk() atau chunkById() untuk memproses data secara bertahap. Jika kebutuhan memori memang wajar, sesuaikan batas PHP pada lingkungan yang menjalankan proses tersebut.
Penutup
Cara mengatasi PHP memory exhausted di VPS dimulai dari menemukan script yang gagal, memeriksa batas memory_limit yang benar-benar aktif, dan melihat apakah RAM server juga mengalami tekanan.
Jika penyebabnya adalah kebutuhan memori aplikasi yang wajar, naikkan batas secara terukur. Jika masalah berasal dari query besar, pemrosesan file, plugin, atau terlalu banyak worker, perbaiki cara kerja aplikasi dan sesuaikan kapasitas PHP-FPM.
Jika error tetap muncul, kumpulkan pesan fatal error lengkap, versi PHP, nilai memory_limit, dan informasi penggunaan RAM saat masalah terjadi. Data tersebut akan membantu mempersempit penyebab tanpa mengubah konfigurasi VPS secara membabi buta.
