Ubuntu 16.04 Server: tingkatkan batas memori PHP
Untuk meningkatkan batas memori PHP yang berjalan sebagai modul Apache di Ubuntu 16.04, ubah nilai memory_limit di file PHP php.ini yang sesuai, kemudian restart Apache dan periksa nilai yang diterapkan dalam permintaan web. Karena PHP-FPM atau CLI PHP mungkin menggunakan file konfigurasi yang berbeda, Anda perlu memeriksa metode eksekusi terlebih dahulu.
Lingkup penerapan dan verifikasi sebelum perubahan
Artikel ini adalah contoh pemeriksaan server yang ada berdasarkan PHP 7.0 dan modul Apache di Ubuntu 16.04. Dukungan keamanan umum untuk Ubuntu 16.04 telah berakhir, dan setelah pemeliharaan keamanan yang diperpanjang, dukungan Legacy terpisah mungkin berlaku. Periksa lingkup penerapan di Jadwal pemeliharaan keamanan Ubuntu dan rencanakan untuk bermigrasi ke lingkungan yang didukung.
memory_limit adalah pengaturan yang membatasi memori yang dapat dialokasikan oleh skrip PHP. Itu bukan memori maksimum dari memori fisik yang terpasang di server atau total memori yang dibagi oleh beberapa permintaan. Meningkatkan batas dapat meningkatkan beban memori server tergantung pada jumlah permintaan simultan, jadi periksa baik memori yang tersedia maupun kesalahan aktual. Nilai default dapat bervariasi tergantung pada pengaturan PHP dan aplikasi.
Menemukan pengaturan PHP yang digunakan di web
Dalam instalasi dasar modul PHP 7.0 Apache di Ubuntu 16.04, /etc/php/7.0/apache2/php.ini digunakan. Namun, jalurnya dapat berbeda tergantung versi PHP, metode instalasi, dan konfigurasi terpisah. PHP-FPM biasanya menggunakan fpm/php.ini terpisah, dan Anda tidak boleh berasumsi bahwa hasil php --ini dari baris perintah sesuai dengan pengaturan untuk permintaan web.
Dalam lingkungan uji terbatas, buat file PHP sementara di direktori dokumen web dan masukkan kode di bawah ini. Buka file tersebut di browser untuk memeriksa metode eksekusi, jalur file konfigurasi, dan batas saat ini. Jangan menempatkannya di lingkungan publik karena informasi server seperti jalur file akan terekspos, dan hapus segera setelah pemeriksaan.
<?php
header('Content-Type: text/plain; charset=UTF-8');
echo 'SAPI: ' . PHP_SAPI . "\n";
echo 'Loaded ini: ' . php_ini_loaded_file() . "\n";
echo 'memory_limit: ' . ini_get('memory_limit') . "\n";
Jika itu apache2handler, itu menggunakan metode modul Apache, dan jika itu fpm-fcgi, itu menggunakan metode PHP-FPM. Jika file konfigurasi tidak muncul atau berbeda dari yang Anda harapkan, periksa instalasi dan koneksi ke server web. PHP mungkin membaca file .ini tambahan selain file default dan nilai dapat ditimpa oleh pengaturan aplikasi atau server. Untuk detail lebih lanjut, lihat dokumentasi file konfigurasi PHP.
Memodifikasi memory_limit
Berikut adalah contoh ketika jalur yang diperiksa di web adalah /etc/php/7.0/apache2/php.ini. Jika jalurnya berbeda, terapkan ke file yang sebenarnya Anda periksa. Sebelum mengedit, pastikan belum ada file cadangan, dan jika ada, ubah nama cadangan dalam perintah di bawah ini menjadi nama baru.
sudo cp -a -n /etc/php/7.0/apache2/php.ini /etc/php/7.0/apache2/php.ini.before-memory-limit
sudo nano /etc/php/7.0/apache2/php.ini
Temukan pengaturan memory_limit yang ada di editor, ubah ke nilai yang dibutuhkan, dan simpan. Misalnya, jika nilai yang ada adalah 128M dan Anda menemukan bahwa lebih banyak diperlukan untuk tugas tersebut, Anda bisa mencoba 256M. Nilai-nilai berikut adalah contoh dan bukan nilai yang direkomendasikan untuk semua server.
memory_limit = 256M
Nilai -1 menghapus batas; jangan gunakan secara sembarangan untuk menyelesaikan masalah. Penyebab kekurangan memori mungkin adalah input yang besar, kode yang tidak efisien, atau permintaan yang bersamaan. Makna nilai-nilai tersebut dapat ditemukan dalam deskripsi PHP memory_limit.
Terapkan ke Apache dan periksa
Dalam metode modul Apache, pertama jalankan pemeriksaan konfigurasi. Syntax OK harus muncul untuk melanjutkan ke langkah berikutnya. Jika pemeriksaan gagal, perbaiki kesalahan tersebut dan periksa lagi. Pemeriksaan ini memverifikasi konfigurasi Apache dan tidak menjamin bahwa batas PHP diterapkan dengan benar dalam permintaan web.
sudo apache2ctl configtest
Jika pemeriksaan berhasil, restart Apache pada waktu yang tepat. Restart dapat memengaruhi koneksi dan permintaan yang sedang berlangsung, jadi tinjau dampaknya di lingkungan produksi.
sudo systemctl restart apache2
sudo systemctl status apache2
Verifikasi bahwa layanan beroperasi secara normal dan minta file pemeriksaan PHP akses terbatas yang dibuat sebelumnya untuk melihat apakah memory_limit menunjukkan nilai yang diinginkan. Setelah pemeriksaan, hapus file sementara tersebut. Selain itu, pastikan kesalahan tidak terulang dalam aplikasi yang sebenarnya.
Dalam kasus PHP-FPM, hanya memperbarui file modul Apache di atas dan merestart mungkin tidak menerapkan pengaturan FPM. Periksa file konfigurasi FPM yang benar-benar dimuat dan nama layanan yang digunakan, dan ikuti prosedur pemeriksaan konfigurasi serta restart untuk layanan tersebut.
Ketika tidak diterapkan atau terjadi masalah
Jika nilai yang diperiksa di web berbeda, periksa apakah path yang diedit, versi PHP, dan metode eksekusi sudah benar. Nilai juga dapat berbeda di file .ini tambahan, pengaturan Apache, pengaturan pool FPM, dan ini_set() aplikasi. Jika terjadi kesalahan memori meskipun sudah melakukan perubahan, Anda perlu melihat log kesalahan, rincian kerja, dan penggunaan memori server secara bersamaan.
Jika Anda perlu mengembalikan perubahan, periksa isi dari file konfigurasi yang telah dibackup dan kembalikan ke file asli, lalu lakukan pengecekan konfigurasi Apache dan restart layanan lagi. Jika path backup berbeda dari contoh, gunakan path backup yang sebenarnya. Anda juga dapat menyimpan konfigurasi saat ini secara terpisah sebelum pemulihan untuk membandingkan perubahannya.




