Solusi error 502 CPU RAM 100% PHP-FPM (Mode Dynamic) by RAM Server

Solusi error 502 CPU RAM 100% PHP-FPM (Mode Dynamic) by RAM Server

Dalam arsitektur web modern yang menggunakan NGINX + PHP-FPM + MySQL, bottleneck paling sering terjadi di PHP-FPM dan database.

Salah satu penyebab utama server:

  • CPU 100%
  • RAM habis
  • muncul error 502

πŸ‘‰ adalah konfigurasi pm.max_children yang tidak sesuai kapasitas RAM.


βš™οΈ Cara Kerja PHP-FPM (Singkat)

Mode:

pm = dynamic

Artinya:

  • PHP-FPM akan membuat worker sesuai kebutuhan
  • Tapi tetap dibatasi oleh pm.max_children

πŸ‘‰ Setiap child process mengkonsumsi RAM (Β±20–50MB)


πŸ“Š Rumus Dasar Perhitungan

Gunakan pendekatan aman:

max_children = (Total RAM - kebutuhan MySQL - OS) / rata-rata memory per PHP process

Asumsi umum:

  • OS + service lain: 300–500MB
  • MySQL: 500MB–1GB (tergantung beban)
  • 1 PHP process: Β±30–50MB

🧾 Standar Konfigurasi

Konfigurasi ini contoh aplikasi pada php versi 7.4 , buka dengan ssh linux vps

nano /etc/php/7.4/fpm/pool.d/www.conf

Ini template dasar yang akan kita sesuaikan:

pm = dynamic
pm.max_children = X
pm.start_servers = Y
pm.min_spare_servers = Z
pm.max_spare_servers = A
pm.max_requests = 300

🟒 1. RAM 2 GB (Server kecil / VPS murah)

pm = dynamic
pm.max_children = 8
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 300

πŸ‘‰ Cocok untuk:

  • Website kecil
  • WordPress ringan
  • Traffic rendah

🟒 2. RAM 3 GB

pm = dynamic
pm.max_children = 12
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 300

πŸ‘‰ Rekomendasi terbaik config ram 3GB (sudah cukup ideal πŸ‘)


🟒 3. RAM 4 GB

pm = dynamic
pm.max_children = 16
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 8
pm.max_requests = 300

πŸ‘‰ Cocok untuk:

  • Website bisnis
  • Traffic sedang

🟒 4. RAM 6 GB

pm = dynamic
pm.max_children = 24
pm.start_servers = 6
pm.min_spare_servers = 4
pm.max_spare_servers = 10
pm.max_requests = 300

πŸ‘‰ Cocok untuk:

  • High traffic
  • API backend

🟒 5. RAM 16 GB (Server besar / production)

pm = dynamic
pm.max_children = 60
pm.start_servers = 10
pm.min_spare_servers = 6
pm.max_spare_servers = 20
pm.max_requests = 500

πŸ‘‰ Cocok untuk:

  • High concurrency
  • SaaS / aplikasi besar

⚠️ Catatan Penting

❗ Jangan terlalu besar – Contoh salah:

pm.max_children = 60 (di RAM 2GB)

πŸ‘‰ Ini akan menyebabkan:

  • RAM habis
  • swap aktif
  • CPU 100%
  • 502 Bad Gateway

❗ MySQL tetap faktor utama

Walaupun PHP-FPM sudah optimal, kalau:

  • query lambat
  • tidak ada index

πŸ‘‰ tetap akan bottleneck di MySQL


❗ Gunakan caching (WAJIB untuk performa)

Rekomendasi:

  • Redis
  • FastCGI cache di NGINX

πŸ”„ Setelah Ubah Konfigurasi

Jangan lupa restart:

systemctl restart php7.4-fpm
systemctl restart nginx

πŸ” Monitoring Setelah Optimasi

Gunakan:

htop

Perhatikan:

  • CPU stabil (<70%)
  • RAM tidak penuh
  • jumlah php-fpm tidak berlebihan
READ :  Server Monitoring Tools Gratis & Berbayar untuk Admin Linux

🧠 Kesimpulan

πŸ‘‰ Kunci stabilitas server bukan β€œbesar angka”, tapi proporsional dengan RAM

Lebih baik:

  • sedikit worker tapi stabil βœ…
    daripada:
  • banyak worker tapi crash ❌