Optimasi PHP-FPM: Konfigurasi www.conf di PHP 8.2

Optimasi PHP-FPM: Konfigurasi www.conf di PHP 8.2

PHP-FPM (FastCGI Process Manager) adalah komponen penting untuk menjalankan PHP di server web seperti Nginx atau Apache. Dengan konfigurasi yang tepat, PHP-FPM dapat meningkatkan performa dan kestabilan situs WordPress, terutama untuk traffic tinggi.

Pada artikel ini, kami akan membahas konfigurasi PHP-FPM untuk PHP 8.2, termasuk fitur terbaru seperti OPcache JIT (Just-in-Time) yang dapat meningkatkan performa, terutama untuk aplikasi yang memerlukan penggunaan CPU berat.

Berikut adalah panduan lengkap konfigurasi www.conf untuk PHP 8.2 FPM yang dioptimalkan untuk WordPress.


1. Lokasi Konfigurasi

File konfigurasi pool untuk PHP-FPM 8.2 terletak di:

/etc/php/8.2/fpm/pool.d/www.conf

File ini mengontrol perilaku PHP-FPM, termasuk pengaturan user, group, socket, dan proses PHP.


2. Pengaturan User dan Group

user = www-data
group = www-data
  • user dan group menentukan akun sistem yang menjalankan proses PHP-FPM. Biasanya menggunakan www-data yang sesuai dengan user/group pada server web seperti Nginx/Apache.

3. Socket PHP-FPM

listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
  • listen: PHP-FPM menggunakan Unix socket /run/php/php8.2-fpm.sock untuk komunikasi antara PHP-FPM dan web server.
  • listen.owner dan listen.group: Hak akses socket yang mengizinkan hanya www-data yang dapat mengaksesnya.
  • listen.mode: Menentukan hak akses socket menjadi 0660, sehingga hanya user dan grup yang ditentukan yang dapat berinteraksi.

4. Process Manager

pm = dynamic
pm.max_children = 800
pm.start_servers = 35
pm.min_spare_servers = 30
pm.max_spare_servers = 50
pm.max_requests = 1000
  • pm = dynamic: Menentukan bahwa jumlah proses PHP dapat berubah dinamis sesuai dengan kebutuhan server.
  • pm.max_children: Jumlah maksimum proses PHP yang dapat dijalankan bersamaan. Disarankan 800 untuk server dengan kapasitas besar (RAM ≥32GB).
  • pm.start_servers: Jumlah server PHP yang dijalankan saat PHP-FPM dimulai (35 server).
  • pm.min_spare_servers & pm.max_spare_servers: Menentukan jumlah minimum dan maksimum proses idle yang siap menangani request.
  • pm.max_requests: Setiap proses PHP akan dipaksa untuk melakukan restart setelah menangani 1000 request, ini membantu untuk mencegah memory leaks.

5. Root Directory

chdir = /
  • chdir = /: Menentukan direktori kerja PHP-FPM. / adalah default yang aman untuk menghindari masalah permission.

6. Pengaturan PHP untuk WordPress

php_admin_value[upload_max_filesize] = 800M
php_admin_value[post_max_size] = 800M
php_admin_value[memory_limit] = 256M
php_admin_value[max_execution_time] = 9200
php_admin_value[max_input_time] = 9200
  • upload_max_filesize & post_max_size: Mengatur ukuran maksimum file yang dapat di-upload (800MB), yang penting untuk situs dengan banyak media, tema besar, atau plugin.
  • memory_limit: Menetapkan batas memori PHP per proses. Untuk WordPress besar, ini diatur menjadi 256MB.
  • max_execution_time & max_input_time: Memberikan waktu lebih untuk eksekusi dan input, cocok untuk proses berat seperti impor data besar.

7. Pengaturan Session PHP

php_admin_value[session.gc_maxlifetime] = 2592000
php_admin_value[session.gc_probability] = 0
php_admin_value[session.gc_divisor] = 100
  • session.gc_maxlifetime: Waktu hidup session ditentukan selama 30 hari (2592000 detik).
  • session.gc_probability & session.gc_divisor: Mengontrol probabilitas garbage collection (GC) untuk session. Nilai ini membantu mengelola session yang terlalu lama dan membersihkan data yang sudah tidak digunakan.

8. OPcache untuk Performa

php_admin_value[opcache.enable] = 1
php_admin_value[opcache.memory_consumption] = 256
php_admin_value[opcache.interned_strings_buffer] = 16
php_admin_value[opcache.max_accelerated_files] = 40000
php_admin_value[opcache.validate_timestamps] = 1
  • OPcache meningkatkan performa PHP dengan menyimpan bytecode yang telah dikompilasi dalam memori. Ini mempercepat eksekusi skrip PHP dan mengurangi beban CPU.
  • opcache.memory_consumption: Menetapkan alokasi memori OPcache sebesar 256MB.
  • opcache.max_accelerated_files: Menentukan jumlah file PHP yang dapat disimpan dalam cache (40.000 file).
  • opcache.validate_timestamps: Menetapkan untuk memvalidasi timestamp file PHP, yang memastikan cache diperbarui saat ada perubahan file.

9. OPcache JIT untuk PHP 8.2 (Just-in-Time Compilation)

PHP 8.2 memperkenalkan fitur Just-in-Time (JIT) Compilation, yang dapat meningkatkan performa untuk aplikasi dengan komputasi intensif. JIT memungkinkan eksekusi kode lebih cepat dengan mengkompilasi kode PHP menjadi bahasa mesin secara dinamis, daripada hanya menginterpretasikan kode.

php_admin_value[opcache.jit] = 1205
php_admin_value[opcache.jit_buffer_size] = 256M

Penjelasan JIT:

  • opcache.jit: Mengaktifkan JIT dengan level 1205, yang memberikan keseimbangan antara kecepatan dan konsumsi memori. Pada level ini, JIT dapat meningkatkan performa PHP dengan lebih efisien, terutama pada aplikasi yang CPU-heavy, seperti kalkulasi matematis atau pemrosesan data besar.
  • opcache.jit_buffer_size: Menetapkan ukuran buffer JIT yang digunakan untuk menyimpan kode yang dikompilasi (256MB). Buffer ini digunakan oleh JIT untuk menyimpan instruksi yang telah dikompilasi agar lebih cepat dieksekusi di masa depan.

Kapan Menggunakan JIT:

JIT lebih bermanfaat untuk aplikasi yang mengandalkan pemrosesan logika berat, seperti aplikasi berbasis data atau kalkulasi intensif. Namun, untuk sebagian besar aplikasi web standar seperti WordPress, manfaat JIT mungkin tidak terlalu besar, karena WordPress lebih banyak bergantung pada I/O (database dan file), bukan komputasi CPU intensif. Tapi, jika server Anda menjalankan aplikasi berat atau situs dengan fitur kustom, menggunakan JIT bisa mempercepat proses.


10. Kesimpulan

Konfigurasi ini dirancang untuk mengoptimalkan PHP 8.2 pada server WordPress dengan performa tinggi. Menggunakan OPcache dan JIT (untuk performa CPU-intensive) memungkinkan server untuk memproses request lebih cepat dan efisien. Namun, disarankan untuk memantau performa server setelah implementasi, karena beberapa pengaturan seperti opcache.jit mungkin memerlukan penyesuaian lebih lanjut tergantung pada aplikasi yang dijalankan.

Jika server memiliki RAM yang lebih terbatas (8GB atau 16GB), beberapa parameter seperti pm.max_children dan memory_limit harus disesuaikan agar tidak menyebabkan masalah performa.


File Konfigurasi www.conf Lengkap PHP 8.2

Berikut adalah file konfigurasi lengkap yang siap digunakan di server:

;==============================
; PHP 8.2 FPM Pool Configuration
;==============================

[www]

;----------------------------------
; User and Group
;----------------------------------
user = www-data
group = www-data

;----------------------------------
; Socket Configuration
;----------------------------------
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

;----------------------------------
; Process Manager
;----------------------------------
pm = dynamic
pm.max_children = 800
pm.start_servers = 35
pm.min_spare_servers = 30
pm.max_spare_servers = 50
pm.max_requests = 1000

;----------------------------------
; Working Directory
;----------------------------------
chdir = /

;----------------------------------
; PHP Settings for WordPress
;----------------------------------
php_admin_value[upload_max_filesize] = 800M
php_admin_value[post_max_size] = 800M
php_admin_value[memory_limit] = 256M
php_admin_value[max_execution_time] = 9200
php_admin_value[max_input_time] = 9200

;----------------------------------
; Session Settings
;----------------------------------
php_admin_value[session.gc_maxlifetime] = 2592000
php_admin_value[session.gc_probability] = 0
php_admin_value[session.gc_divisor] = 100

;----------------------------------
; OPcache Settings
;----------------------------------
php_admin_value[opcache.enable] = 1
php_admin_value[opcache.memory_consumption] = 256
php_admin_value[opcache.interned_strings_buffer] = 16
php_admin_value[opcache.max_accelerated_files] = 40000
php_admin_value[opcache.validate_timestamps] = 1

; Optional JIT for PHP 8.2 (improves CPU-heavy performance)
php_admin_value[opcache.jit] = 1205
php_admin_value[opcache.jit_buffer_size] = 256M

;----------------------------------
; End of Configuration
;----------------------------------

Dengan konfigurasi ini, server Anda siap untuk menangani situs WordPress dengan performa yang optimal, baik untuk traffic tinggi, upload file besar, maupun aplikasi yang memerlukan pemrosesan data berat.