Server Solusi – Ketika PHP-FPM gagal menjalankan pool, website yang menggunakan PHP bisa tiba-tiba menampilkan HTTP 502 Bad Gateway, mengalami gangguan saat memproses halaman dinamis, atau tidak bisa menjalankan PHP sama sekali. Kondisi ini sering ditemukan ketika konfigurasi pool diubah, versi PHP diperbarui, atau pengaturan socket tidak lagi sesuai dengan konfigurasi web server.
Pesan PHP-FPM pool failed to start sendiri belum cukup untuk menentukan penyebabnya. Error tersebut bisa berasal dari kesalahan sintaks konfigurasi, nama pengguna yang tidak valid, direktori socket yang bermasalah, konflik alamat listen, atau keterbatasan resource server.
Dalam troubleshooting, saya menyarankan untuk memeriksa log dan memvalidasi konfigurasi sebelum mengubah file atau me-restart layanan berulang kali. Dengan begitu, kamu bisa mempersempit penyebab berdasarkan bukti, bukan menebak-nebak pengaturan yang harus diganti.
Perlu dicatat, karena belum ada log aktual atau detail konfigurasi server yang diberikan, panduan berikut membahas beberapa skenario yang mungkin terjadi, bukan mengklaim bahwa satu penyebab tertentu sudah ditemukan atau berhasil diperbaiki.
Mengapa PHP-FPM pool gagal berjalan?
PHP-FPM pool gagal berjalan ketika proses PHP-FPM tidak dapat membaca konfigurasi pool atau memulai prosesnya dengan pengaturan yang tersedia. Penyebab yang umum meliputi kesalahan pada file konfigurasi pool, pengguna atau grup sistem yang tidak tersedia, socket yang tidak dapat dibuat, serta konflik port atau alamat socket.
Pemeriksaan awal yang paling aman adalah melihat status service, membaca log terbaru, dan menjalankan pengujian konfigurasi PHP-FPM. Setelah penyebabnya diketahui, perbaiki bagian yang bermasalah lalu validasi konfigurasi sebelum melakukan reload atau restart layanan.
Gejala dan kemungkinan penyebab
Pesan yang muncul saat PHP-FPM gagal berjalan bisa berbeda menurut distribusi Linux, versi PHP, dan cara service dikelola. Perhatikan pesan lengkapnya, bukan hanya status failed.
| Gejala atau pesan log | Kemungkinan penyebab | Pemeriksaan berikutnya |
|---|---|---|
failed to load configuration file | File konfigurasi tidak ditemukan atau path salah | Periksa unit service dan lokasi konfigurasi |
unknown entry atau unknown directive | Directive tidak dikenal atau salah penulisan | Jalankan pengujian konfigurasi |
user ... does not exist | Akun sistem pada konfigurasi pool tidak tersedia | Periksa nama user dan group |
Address already in use | Port sudah digunakan atau alamat listen mengalami konflik | Periksa konfigurasi pool dan port |
Permission denied | Akses ke socket atau direktori ditolak | Periksa permission dan kepemilikan |
unable to bind listening socket | Socket atau alamat listen tidak bisa digunakan | Periksa path, port, dan konflik |
server reached pm.max_children | Pool kehabisan slot worker, bukan selalu kegagalan startup | Periksa beban dan konfigurasi worker |
Failed with result 'exit-code' | Service berhenti dengan kode keluar | Periksa log beberapa baris sebelumnya |
PHP-FPM mendukung beberapa pool dengan pengaturan pengguna, proses, dan alamat FastCGI yang berbeda. Setiap pool memiliki konfigurasi sendiri, sehingga satu pool yang bermasalah perlu diperiksa tanpa langsung mengubah seluruh instalasi PHP.

Kesalahan konfigurasi setelah perubahan PHP
Masalah ini dapat muncul setelah pembaruan versi PHP, penyalinan konfigurasi dari server lain, atau perubahan manual pada file pool.
Contohnya, sebuah pool mengacu pada user yang sudah dihapus atau menggunakan directive yang tidak dikenali oleh versi PHP-FPM yang sedang dijalankan.
Cara membedakannya adalah dengan menjalankan pemeriksaan konfigurasi menggunakan binary PHP-FPM yang tepat. Jika pengujian gagal, selesaikan error konfigurasi terlebih dahulu sebelum mencoba menjalankan service kembali.
Konflik socket antara PHP-FPM dan web server
Nginx atau Apache harus terhubung ke endpoint FastCGI yang benar. Endpoint tersebut dapat berupa socket Unix, misalnya /run/php/php8.3-fpm.sock, atau alamat TCP seperti 127.0.0.1:9000.
Jika dua pool mencoba menggunakan alamat yang sama, salah satu pool mungkin gagal membuat listener. Sebaliknya, jika PHP-FPM berhasil berjalan tetapi Nginx menunjuk ke socket yang salah, website tetap bisa menghasilkan 502 Bad Gateway.
Karena itu, bedakan antara pool gagal start dan web server gagal terhubung ke pool yang sudah berjalan. Keduanya berkaitan, tetapi penanganannya tidak selalu sama.
Proses diagnosis PHP-FPM pool failed to start
Contoh berikut menggunakan Linux dengan systemd, seperti Ubuntu atau Debian. Nama service dan path konfigurasi dapat berbeda pada AlmaLinux, Rocky Linux, CentOS, instalasi PHP dari repository pihak ketiga, atau server yang dikelola melalui panel hosting.
1. Periksa status service PHP-FPM
Pertama, cari nama service yang benar:
systemctl list-units --type=service --all | grep -E 'php.*fpm'Perintah ini menampilkan service yang namanya cocok dengan pola PHP-FPM. Contohnya, pada sebagian sistem Ubuntu, service dapat bernama php8.3-fpm.service.
Setelah menemukan nama yang tepat, periksa statusnya:
sudo systemctl status php8.3-fpm --no-pager -lGanti php8.3-fpm sesuai nama service di servermu.
Perhatikan bagian Active, Result, kode keluar, dan pesan error terakhir. Status failed hanya menunjukkan service gagal berjalan; penyebabnya biasanya perlu dicari di log yang lebih lengkap.
Jika service tidak ditemukan, jangan langsung memasang ulang PHP. Pastikan dahulu versi PHP yang terpasang dan apakah service dikelola oleh systemd, panel hosting, atau mekanisme lain.

2. Baca log PHP-FPM dari systemd
Gunakan:
sudo journalctl -u php8.3-fpm -n 100 --no-pagerPerintah ini menampilkan hingga 100 entri log terbaru untuk service tersebut. Jika error terjadi saat boot, kamu juga bisa memeriksa log sejak boot saat ini:
sudo journalctl -b -u php8.3-fpm --no-pagerCari pesan yang muncul tepat sebelum service dinyatakan gagal. Pesan awal biasanya lebih berguna daripada status akhir karena bisa menunjukkan file konfigurasi, socket, atau akun sistem yang bermasalah.
Jika log systemd tidak memberikan informasi yang cukup, periksa error_log yang ditentukan pada konfigurasi utama PHP-FPM. Lokasinya tidak selalu sama pada setiap instalasi.
3. Uji konfigurasi menggunakan binary yang sesuai
Ini salah satu pemeriksaan paling penting sebelum melakukan restart berulang kali.
Cari binary PHP-FPM yang tersedia:
command -v php-fpmls -l /usr/sbin/php-fpm*Tidak semua sistem menyediakan binary dengan nama php-fpm; sebagian menggunakan nama versi, misalnya php-fpm8.3.
Jika binary yang sesuai adalah /usr/sbin/php-fpm8.3, jalankan:
sudo /usr/sbin/php-fpm8.3 -tOpsi -t digunakan untuk menguji konfigurasi. Jika pengujian gagal, baca file dan nomor baris yang disebutkan dalam output, lalu periksa directive terkait.
Jika pengujian berhasil, artinya konfigurasi lolos pemeriksaan sintaks yang dilakukan binary tersebut. Ini belum menjamin service pasti dapat berjalan karena konflik socket, izin akses, atau masalah runtime masih mungkin terjadi. Dokumentasi PHP menjelaskan konfigurasi global PHP-FPM dan pengaturan pool secara terpisah.
4. Temukan file konfigurasi pool yang bermasalah
Pada banyak instalasi Debian dan Ubuntu, konfigurasi pool berada di:
/etc/php/8.3/fpm/pool.d/Namun, lokasi ini hanya contoh. Instalasi lain mungkin menggunakan /etc/php-fpm.d/ atau direktori khusus dari panel hosting.
Untuk memeriksa nama file konfigurasi:
ls -la /etc/php/8.3/fpm/pool.d/Kemudian, cari directive yang berkaitan dengan identitas proses dan alamat listener:
grep -nE '^\s*(user|group|listen|listen\.owner|listen\.group|listen\.mode)\s*=' \/etc/php/8.3/fpm/pool.d/*.confSesuaikan path dengan lokasi konfigurasi aktual.

Perintah tersebut membantu menemukan pengaturan yang aktif secara eksplisit. Namun, hasilnya bukan pengganti pembacaan file lengkap karena konfigurasi dapat menggunakan nilai default atau pengaturan yang berasal dari file lain.
5. Pastikan akun dan resource sistem tersedia
Jika log menyebut user atau group tidak ditemukan, periksa nama yang digunakan oleh pool:
getent passwd www-datagetent group www-dataContoh ini menggunakan akun www-data yang umum pada Debian dan Ubuntu. Jangan menganggap semua server menggunakan akun tersebut. Nginx, Apache, dan pool PHP-FPM dapat memakai user yang berbeda.
Jika log menunjukkan kegagalan membuat file socket atau file PID, periksa direktori terkait dan izin aksesnya. Untuk masalah kehabisan resource, periksa kondisi memori dan disk:
free -hdf -hPerintah pertama menampilkan penggunaan memori, sedangkan perintah kedua menunjukkan kapasitas filesystem. Jika kapasitas disk penuh, PHP-FPM mungkin tidak dapat membuat file yang dibutuhkan. Jika memori sangat terbatas, proses worker juga bisa terdampak.
Jangan langsung menaikkan batas worker atau mengubah permission sebelum mengetahui pesan error yang mendasarinya.
Langkah perbaikan berdasarkan hasil diagnosis
Setelah mengetahui pesan error yang sebenarnya, pilih langkah perbaikan yang sesuai. Sebelum mengedit konfigurasi produksi, buat salinan file yang akan diubah agar kamu bisa mengembalikan pengaturan sebelumnya jika diperlukan.
1. Perbaiki kesalahan konfigurasi pool
Jika pengujian php-fpm -t menunjukkan kesalahan pada file pool, buka file yang disebutkan dalam pesan error.
Misalnya:
sudo nano /etc/php/8.3/fpm/pool.d/www.confPath tersebut hanya contoh untuk Ubuntu dengan PHP 8.3. Gunakan path yang sesuai dengan hasil diagnosis servermu.
Periksa directive yang disebutkan dalam error, termasuk tanda baca, nama directive, dan nilai yang digunakan. Konfigurasi pool biasanya berisi bagian seperti:
[www]user = www-datagroup = www-datalisten = /run/php/php8.3-fpm.sockNilai di atas merupakan contoh, bukan konfigurasi universal. Pastikan akun dan alamat socket sesuai dengan instalasi aktual.
Setelah memperbaiki file, jalankan kembali pengujian:
sudo /usr/sbin/php-fpm8.3 -tJika masih gagal, jangan lanjut ke restart. Periksa pesan error berikutnya karena satu file bisa memiliki lebih dari satu kesalahan.
2. Perbaiki user atau group yang tidak ditemukan
Jika log menyebut user not found atau group not found, periksa apakah akun yang ditentukan dalam konfigurasi pool memang tersedia.
Jangan langsung mengganti semua pool menjadi www-data. Pada server dengan banyak website, setiap pool mungkin sengaja menggunakan user terpisah untuk membatasi akses antarwebsite.
Langkah yang lebih aman adalah:
Identifikasi user dan group yang seharusnya digunakan oleh pool.
Periksa apakah akun tersebut masih tersedia.
Cocokkan dengan konfigurasi deployment atau panel hosting.
Perbaiki nilai
userataugrouphanya jika terbukti tidak sesuai.Jalankan ulang pengujian konfigurasi.
Jika akun dihapus secara tidak sengaja, pertimbangkan dampaknya terhadap kepemilikan file aplikasi sebelum membuat akun pengganti.
3. Atasi konflik alamat listen atau socket
Jika log menyebut Address already in use atau unable to bind listening socket, periksa apakah beberapa pool menggunakan endpoint yang sama.
Misalnya, dua pool memiliki konfigurasi:
listen = 127.0.0.1:9000Jika keduanya dijalankan secara bersamaan, keduanya tidak dapat menggunakan alamat dan port yang sama sebagai listener independen.
Periksa semua pool dan tentukan apakah setiap pool seharusnya menggunakan socket atau port tersendiri. Jangan mengubah port secara acak karena Nginx atau Apache mungkin masih mengarah ke endpoint lama.
Untuk memeriksa port TCP yang digunakan:
sudo ss -ltnpUntuk memeriksa socket Unix yang terkait PHP-FPM:
sudo ss -lxnp | grep -E 'php|fpm'Jika menggunakan socket Unix, pastikan path-nya benar dan direktori induknya tersedia. Jika socket lama tertinggal, cari tahu apakah masih digunakan oleh proses aktif sebelum menghapus atau menggantinya.
Jangan menghapus socket secara paksa hanya karena file tersebut ditemukan. Pastikan service yang menggunakannya sudah berhenti dan penyebab konfliknya sudah diketahui.
4. Perbaiki permission socket jika pool berjalan tetapi website menghasilkan 502
Ada kondisi ketika PHP-FPM sebenarnya sudah aktif, tetapi Nginx tidak dapat mengakses socket. Dalam kasus ini, masalahnya bukan lagi kegagalan startup pool, melainkan komunikasi antara web server dan PHP-FPM.
Periksa konfigurasi pool, terutama:
listen = /run/php/php8.3-fpm.socklisten.owner = www-datalisten.group = www-datalisten.mode = 0660Contoh ini berlaku jika konfigurasi server memang menggunakan socket tersebut dan identitas yang sesuai adalah www-data.
Pada Linux, izin socket harus memungkinkan proses web server melakukan koneksi. Sesuaikan listen.owner, listen.group, dan listen.mode dengan user serta group yang sebenarnya. Hindari permission 777 karena dapat memberikan akses berlebihan.
Periksa pula konfigurasi Nginx, biasanya pada blok PHP dalam konfigurasi virtual host:
fastcgi_pass unix:/run/php/php8.3-fpm.sock;Path tersebut harus sama dengan endpoint yang benar-benar digunakan pool. Jika PHP-FPM memakai TCP, konfigurasi fastcgi_pass juga harus mengikuti alamat TCP yang sesuai.
Setelah mengubah konfigurasi Nginx, validasi sintaksnya sebelum melakukan reload:
sudo nginx -tJangan menjalankan reload jika pengujian gagal. Perbaiki error yang dilaporkan terlebih dahulu.
5. Tangani masalah resource atau proses yang terlalu banyak
Jika log mengarah ke kehabisan memori, kegagalan membuat proses, atau keterbatasan resource, periksa kondisi server sebelum mengubah pengaturan pool.
Konfigurasi berikut mengatur jumlah proses pada pool:
pm = dynamicpm.max_children = 10pm.start_servers = 2pm.min_spare_servers = 1pm.max_spare_servers = 3Nilai tersebut hanya ilustrasi, bukan rekomendasi untuk semua server. Pengaturan yang sesuai bergantung pada konsumsi memori setiap worker, jumlah website, pola trafik, dan resource yang tersedia.
Perlu dibedakan antara pool yang gagal start dan pool yang berjalan tetapi mencapai pm.max_children. Jika service aktif dan log menunjukkan server reached pm.max_children, masalahnya bisa berupa kapasitas pemrosesan yang tidak cukup untuk beban saat itu.
Jangan langsung menaikkan pm.max_children. Jumlah worker yang terlalu tinggi justru dapat menghabiskan memori dan membuat server semakin tidak stabil.
Memulai kembali PHP-FPM dengan aman
Setelah penyebab diperbaiki dan konfigurasi lolos pengujian, kamu dapat mencoba memulai atau me-restart service sesuai kondisinya.
Jika service sedang gagal atau berhenti:
sudo systemctl start php8.3-fpmJika service sudah berjalan dan kamu perlu menerapkan perubahan konfigurasi:
sudo systemctl reload php8.3-fpmDukungan reload bergantung pada service dan paket yang digunakan. Jika reload tidak didukung atau tidak sesuai dengan kebutuhan perubahan, ikuti prosedur restart yang berlaku pada instalasi tersebut.
Restart dapat mengganggu pemrosesan request aktif untuk sementara. Pada server produksi, lakukan perubahan pada waktu yang sesuai dan pastikan tersedia akses pemulihan jika service gagal kembali.
Verifikasi hasil perbaikan
Setelah menjalankan tindakan yang diperlukan, lakukan pemeriksaan berikut.
1. Pastikan status PHP-FPM aktif
sudo systemctl status php8.3-fpm --no-pager -lHasil yang diharapkan adalah status active (running). Namun, status aktif belum membuktikan bahwa seluruh pool dan koneksi web server bekerja dengan benar.
2. Periksa log terbaru
sudo journalctl -u php8.3-fpm -n 50 --no-pagerPastikan tidak ada error startup baru. Jika pesan lama masih terlihat, perhatikan timestamp-nya agar tidak salah menganggap error sebelum perbaikan sebagai error terbaru.
3. Uji website melalui HTTP
Dari terminal, jalankan:
curl -sS -o /dev/null -w "%{http_code}\n" \https://domainkamu.com/Ganti domain contoh dengan website yang ingin diperiksa.
Kode 200 umumnya menunjukkan permintaan berhasil, sedangkan 502 dapat menunjukkan masalah komunikasi antara web server dan upstream. Kode 500 dapat berasal dari aplikasi PHP atau komponen lain.
Hasil HTTP saja tidak selalu cukup. Uji halaman dinamis yang relevan, periksa log web server, dan pastikan aplikasi berfungsi sebagaimana mestinya.
Jika PHP-FPM sudah aktif tetapi website masih menghasilkan 502, lanjutkan dengan memeriksa kecocokan endpoint FastCGI pada Nginx atau Apache.
Pencegahan agar PHP-FPM tidak gagal start kembali
Untuk mengurangi risiko masalah serupa, terapkan beberapa kebiasaan berikut:
Backup konfigurasi sebelum mengedit. Simpan salinan file pool dan konfigurasi utama sebelum melakukan perubahan.
Uji konfigurasi terlebih dahulu. Gunakan opsi pengujian dari binary PHP-FPM yang sesuai sebelum menerapkan perubahan.
Hindari mencampur versi PHP. Pastikan file konfigurasi, binary, dan service berasal dari versi yang sesuai.
Dokumentasikan endpoint pool. Catat socket atau port yang digunakan setiap pool dan web server yang mengaksesnya.
Pantau resource server. Perhatikan penggunaan memori, disk, jumlah worker, dan log ketika trafik meningkat.
Lakukan pembaruan secara terencana. Setelah memperbarui PHP atau panel hosting, verifikasi service serta konfigurasi pool yang terdampak.
Gunakan konfigurasi per website secara konsisten. Pada server multi-website, hindari perubahan global tanpa memahami dampaknya terhadap pool lain.
FAQ seputar PHP-FPM pool failed to start
1. Apa penyebab paling umum PHP-FPM pool failed to start?
Penyebabnya bisa berupa kesalahan konfigurasi, user atau group tidak tersedia, konflik socket, atau kegagalan membuat listener. Log PHP-FPM dan hasil pengujian konfigurasi diperlukan untuk menentukan penyebab yang sebenarnya.
2. Bagaimana cara memeriksa error konfigurasi PHP-FPM?
Gunakan binary PHP-FPM yang sesuai dengan versi instalasi dan jalankan opsi -t. Contohnya, sudo /usr/sbin/php-fpm8.3 -t. Perintah ini memeriksa konfigurasi tanpa perlu memulai ulang service.
3. Apakah PHP-FPM pool yang gagal start selalu menyebabkan error 502?
Tidak selalu. Jika website bergantung pada pool tersebut, Nginx atau Apache dapat menghasilkan 502 karena upstream tidak tersedia. Namun, kode 502 juga dapat disebabkan oleh masalah koneksi lain, sehingga log kedua layanan tetap perlu diperiksa.
4. Mengapa PHP-FPM aktif tetapi website tetap tidak bisa diakses?
Web server mungkin menggunakan socket yang berbeda dari konfigurasi PHP-FPM, tidak memiliki izin mengakses socket, atau mengalami masalah lain saat meneruskan request. Periksa konfigurasi fastcgi_pass, endpoint listen, dan error log web server.
5. Apakah aman me-restart PHP-FPM berulang kali sampai berhasil?
Tidak disarankan. Restart berulang kali tidak memperbaiki kesalahan konfigurasi atau konflik socket yang mendasarinya dan dapat mengganggu request aktif. Identifikasi penyebab dari log, perbaiki, validasi konfigurasi, lalu jalankan service kembali.
Penutup
Saat menghadapi PHP-FPM pool failed to start, mulailah dari status service dan log, kemudian validasi konfigurasi menggunakan binary yang benar. Setelah itu, periksa akun sistem, alamat listener, socket, serta resource server sesuai pesan error yang ditemukan.
Jika service sudah aktif tetapi website masih mengalami 502, arahkan pemeriksaan ke koneksi antara web server dan PHP-FPM. Dengan memisahkan kedua kondisi tersebut, kamu dapat mempersempit diagnosis tanpa mengubah konfigurasi yang sebenarnya tidak bermasalah.
