Kenapa 503 bukan tanda server mati
.txt. Kalau file statis tampil normal tapi halaman PHP 503, hampir pasti masalahnya di lapisan PHP akun itu.
Cara LiteSpeed membagi proses PHP per akun
LSAPI_CHILDREN, tergantung versi dan cara konfigurasinya. Kalau server memakai CloudLinux, ada lapisan batas lagi: entry process (EP), yaitu jumlah request dinamis yang boleh masuk ke akun secara bersamaan, dan NPROC, yaitu total proses yang boleh dimiliki user.
Alurnya kurang lebih begini:
- Request masuk ke LiteSpeed.
- LiteSpeed mencari proses lsphp milik akun itu yang sedang kosong.
- Kalau semua sedang sibuk dan jumlahnya sudah di batas, request masuk antrean.
- Kalau dalam waktu tertentu tidak ada proses yang bebas, LiteSpeed menyerah dan mengembalikan 503.
Kenapa jatah proses bisa habis padahal trafik biasa saja
- Query database lambat, misalnya tabel besar tanpa index yang tepat atau plugin yang menjalankan query berat di setiap halaman.
- Panggilan ke layanan eksternal yang timeout, seperti API pembayaran, cek lisensi plugin, atau font dan script dari pihak ketiga yang dipanggil dari sisi server.
- Brute force ke
wp-login.phpatauxmlrpc.php. Setiap percobaan login tetap memakai satu proses PHP, dan bot bisa mengirimnya bersamaan dalam jumlah banyak. - Crawler agresif atau bot yang menjelajah halaman pencarian, filter produk, atau URL dengan parameter yang tidak ter-cache.
- WP-Cron yang dipicu setiap kunjungan dan menjalankan tugas berat.
memory_limit juga tidak membantu di kasus ini, karena itu batas memori per proses, bukan jumlah proses. Soal itu sudah dibahas di Mengira Naikkan memory_limit PHP Bikin Website Lebih Cepat.
Cara mengecek sebelum menyimpulkan
/usr/local/lsws/logs/error.log, tapi bisa berbeda tergantung setup.
BASH
# Cari pesan terkait batas proses PHP di error log LiteSpeed (read-only)
grep -iE 'max children|max connections|503' /usr/local/lsws/logs/error.log | tail -n 50TEXT
# contoh format output, bukan dari insiden nyata
[UID:1001][PID:12345] Reached max children process limit: 10, extra: 0, current: 10, busy: 10, please increase LSAPI_CHILDREN.busy yang sama dengan batasnya. Artinya semua proses akun sedang terpakai, dan request baru tidak kebagian.
Kalau ingin melihat kondisi saat itu juga, hitung proses lsphp milik user tersebut. Ganti namauser dengan username akun.
BASH
# Hitung proses lsphp yang sedang berjalan untuk satu user (read-only)
ps -u namauser -o comm= | grep -c lsphpwp-login.php atau xmlrpc.php, satu IP yang meminta ratusan URL, atau satu endpoint yang selalu muncul tepat sebelum 503 mulai. Kalau ada akses ke MySQL slow query log atau slow log PHP, cocokkan juga waktunya.
Kenapa upgrade server jarang jadi jawaban
xmlrpc.php kalau tidak dipakai, lindungi halaman login, dan blokir crawler yang tidak membawa manfaat. Ketiga, perbaiki bagian yang lambat, entah query, plugin, atau panggilan eksternal yang perlu timeout lebih pendek. Baru setelah itu, kalau trafik sah memang butuh lebih banyak proses bersamaan, menaikkan limit atau upgrade paket jadi keputusan yang masuk akal dan terukur.
Aku biasanya menganggap permintaan upgrade sebagai pertanyaan terakhir, bukan pertama. Kalau log menunjukkan proses penuh karena request lambat, upgrade cuma menunda. Kalau log menunjukkan proses penuh karena pengunjung sah yang memang ramai dan halaman sudah ter-cache, upgrade memang jawabannya.
Jadi lain kali 503 muncul di LiteSpeed, jangan langsung minta restart atau upgrade. Cek dulu apakah situs lain dan file statis masih normal, lihat error log untuk pesan batas proses, hitung proses lsphp akun, lalu cari request apa yang menahan proses itu. Dalam banyak kasus, jawabannya ada di satu plugin, satu query, atau satu bot, dan memperbaikinya jauh lebih murah daripada pindah server.