HestiaCP PHP-FPM sedang dalam beban berat? Kesalahan halaman web dinamis 500? Pengoptimalan ini akan segera berlaku!

Pernahkah Anda mengalami situasi ini? Situs web Anda tiba-tiba melambat, atau bahkan menampilkan kesalahan 500. Memulai ulang PHP-FPM mengembalikannya ke kondisi normal , tetapi masalah muncul kembali setelah beberapa saat? Ini sangat menjengkelkan!

Mengapa ini terjadi? Sebenarnya, ini biasanya disebabkan oleh konfigurasi process pool PHP-FPM yang tidak tepat atau sumber daya server yang tidak mencukupi . Hari ini, kita akan mengoptimalkan PHP-FPM secara menyeluruh di bawah HestiaCP untuk memastikan stabilitas situs web Anda yang kokoh!

Alasan utama mengapa PHP-FPM kelebihan beban

PHP-FPM adalah pengelola proses untuk PHP , yang bertanggung jawab untuk menangani permintaan dinamis. Konfigurasi yang tidak tepat dapat menyebabkan:

  • Sumber daya server habis, menyebabkan PHP-FPM tidak dapat menanggapi permintaan baru secara tepat waktu;
  • Prosesnya terlalu sedikit, ketika lalu lintas tiba-tiba meningkat, hal tersebut tidak dapat diproses tepat waktu;
  • Penggunaan proses terlalu tinggi, yang menyebabkan beban CPU meledak.

HestiaCP PHP-FPM sedang dalam beban berat? Kesalahan halaman web dinamis 500? Pengoptimalan ini akan segera berlaku!

Bagaimana cara mengetahui apakah PHP-FPM kelebihan beban?

bisa menggunakan tophtop Perintah untuk melihat penggunaan CPU dan memori:

top -c

Jika Anda melihat informasi proses yang mirip dengan berikut ini, berarti PHP-FPM berjalan dengan beban tinggi:

1669293 abc     20   0  790284 227880 185568 R  73.1   0.9   1:30.09 php-fpm: pool chenweiliang.com                                                    
1669522 abc     20   0  801924 224224 170236 R  69.9   0.9   0:59.01 php-fpm: pool chenweiliang.com

Apakah Anda melihat proses-proses ini menggunakan lebih dari 70% CPU? Jika ini sering terjadi, maka pasti ada yang salah dengan PHP-FPM Anda!

Jadi, bagaimana kita dapat mengoptimalkan konfigurasi PHP-FPM agar server tidak lagi kelebihan beban?

Optimasi kumpulan proses PHP-FPM (penyesuaian parameter inti)

Pertama, buka php-fpm File Konfigurasi:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Ubah ke versi PHP Anda, seperti PHP8.5, dan ubah ke ini:/etc/php/8.3/fpm/pool.d/www.conf

Menanyakan versi PHP yang ditetapkan oleh HestiaCP

v-list-web-domain user domain.com

Misalnya:

v-list-web-domain abc chenweiliang.com

Pada output, Anda akan melihat sesuatu seperti:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.5 

Ini menunjukkan bahwa situs web tersebut menggunakan PHP 8.5.

Mari kita lihat konfigurasi PHP-FPM Anda:

[chenweiliang.com]
listen = /run/php/php8.5-fpm-chenweiliang.com.sock
listen.owner = abc
listen.group = www-data
listen.mode = 0660

user = abc
group = abc

pm = ondemand
pm.max_children = 8
pm.max_requests = 4000
pm.process_idle_timeout = 10s

Anda dapat melihat bahwa Anda pm Yang digunakan adalah ondemand,Meskipun dapat mengurangi penggunaan sumber daya selama waktu idle, ketika lalu lintas tiba-tiba meningkat, proses mungkin tidak dapat merespons tepat waktu., mengakibatkan kesalahan 500.

www.conf: "Kumpulan sumber daya universal" bawaan sistem

Setelah menginstal PHP-FPM, sistem akan secara otomatis memberi Anda... www.conf mengajukan.
-nyaPenentuan posisiIni sangat sederhana—ini hanyalah kumpulan proses default yang langsung berfungsi tanpa perlu konfigurasi tambahan, biasanya terhubung ke... www-data Unduhan pengguna.

Jenis pool ini sangat cocok untuk lingkungan single-site: konfigurasinya ringan, dan semua parameternya berupa template generik, seperti:

user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm.max_children = 5

Jika Anda hanya menghosting satu situs, Anda dapat menggunakannya secara langsung dan andal tanpa kerumitan tambahan.

etbenda terbang aneh.org.conf: Kumpulan kustom

Begitu Anda mengelola beberapa situs, Anda tidak bisa lagi memasukkan semuanya ke dalam satu wadah yang sama.
Pada tahap ini, HestiaCP akan secara otomatis membuat pool terpisah untuk setiap situs, misalnya... etbenda terbang aneh.org.confKhusus untuk nama domain etufo.org 。。

Cara bermain yang umum adalah:

  • Ubah pengguna dan grup:user = etufo,group = etufo
  • Pemantauan independen:listen = /run/php/etufo.sock
  • Menyesuaikan jumlah proses memastikan stabilitas yang sangat kokoh bahkan dalam kondisi konkurensi tinggi.
  • File log terpisah membuat pemecahan masalah menjadi lebih jelas.

Manfaatnya jelas: isolasi yang aman . Bahkan jika satu situs diretas, situs lainnya tetap tidak terpengaruh.

dummy.conf: file dummy

dummy.conf Ini biasanya berupa contoh atau templat yang disediakan oleh sistem.
Program tersebut tidak akan berjalan kecuali Anda memodifikasinya dan mengaktifkannya secara manual.
Signifikansinya lebih seperti "manual pengoperasian," yang memberi tahu Anda cara menulis konfigurasi pool baru.

Mengapa kolam renang dibagi?

  • 安全 性Gunakan pengguna yang berbeda untuk situs yang berbeda untuk menghindari konflik izin.
  • 性能优化Jumlah proses dapat disesuaikan secara individual untuk setiap pool, memungkinkan penyesuaian yang fleksibel berdasarkan permintaan lalu lintas.
  • IsolasiLog, kesalahan, dan alamat yang mendengarkan semuanya dipisahkan, sehingga memudahkan pemecahan masalah.

Sebagai contoh, meskipun www.conf mengalami crash, etufo.org.conf akan tetap berjalan normal dan tidak akan menyebabkan seluruh server mati.

实际场景

  • Server situs tunggal: www.conf sudah cukup.
  • Server multisitusSetiap situs memiliki file .conf independennya sendiri, seperti etufo.org.conf.
  • dummy.confHanya sebagai referensi, tidak direkomendasikan.

Perbandingan Konfigurasi

www.conf (pool default)

[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm = dynamic
pm.max_children = 5

etufo.org.conf (Kumpulan Kustom)

[etufo.org]
user = etufo
group = etufo
listen = /run/php/etufo.sock
pm = dynamic
pm.max_children = 20
access.log = /var/log/php-fpm/etufo.access.log

Perbedaan utamanya adalah: identitas pengguna, alamat mendengarkan, dan jumlah proses.

1. Sesuaikan parameter kumpulan proses PHP-FPM

Jika konfigurasi menggunakan dynamicIni adalah metode untuk memulai terlebih dahulu beberapa proses kerja dan menyesuaikannya secara dinamis berdasarkan volume permintaan, yang dapat merespons lebih cepat saat volume permintaan tiba-tiba meningkat.

Untuk situs web dengan jumlah lalu lintas tertentu, disarankan untuk menggunakan pm = dynamicKarena dapat mempertahankan sejumlah proses menganggur dan menghindari 500 kesalahan selama konkurensi tinggi.

Disarankan untuk menggunakannya hanya ketika volume akses sangat rendah dan sumber daya memori terbatas. pm = ondemand Untuk menghemat sumber daya.

Disarankan untuk dynamic, dan mengoptimalkan pm.max_children Dan parameter lainnya:

pm = dynamic
pm.max_children = 16  ; 根据服务器资源调整,建议值:CPU 核心数 × 2
pm.start_servers = 4   ; 初始进程数,建议设为 max_children × 25%
pm.min_spare_servers = 2  ; 最小空闲进程数
pm.max_spare_servers = 7  ; 最大空闲进程数
pm.max_requests = 3000    ; 每个子进程处理完 3000 个请求后自动重启
pm.process_idle_timeout = 10s  ; 空闲进程 10s 后自动退出

Mengapa Anda ingin mengubahnya seperti ini?

  • pm = dynamic:Alokasikan proses secara lebih fleksibel untuk menghindari permintaan menunggu yang mungkin disebabkan oleh ondemand;
  • pm.max_children = 16: Mencegah kesalahan 500 yang disebabkan oleh terlalu sedikit proses;
  • pm.start_servers = 5:Hindari startup proses yang lambat;
  • pm.max_requests = 3000:Mencegah kebocoran memori, daur ulang proses tersebut secara teratur.

2. Batasi waktu eksekusi skrip PHP untuk mencegah okupansi jangka panjang

request_terminate_timeout = 30s  ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M  ; 限制 PHP 进程最大内存占用

Ini mencegah skrip PHP tertentu yang mengonsumsi CPU secara berlebihan agar tidak menyebabkan server mengalami crash.

Setelah menyimpan, mulai ulang proses PHP:

sudo systemctl restart php8.3-fpm

Optimalkan PHP-FPM berdasarkan konfigurasi VPS

Contoh konfigurasi VPS:

  • Deskripsi: VPS 3 NVMe
  • Ruang Disk: 300 GB
  • Inti CPU: 8
  • RAM: 24 GB

Berdasarkan konfigurasi VPS Anda ( 8 inti CPU, 24 GB RAM ), sumber daya server Anda lebih dari cukup. Untuk PHP-FPM, 24 GB RAM memungkinkan Anda untuk mengkonfigurasi jumlah proses konkuren yang sangat tinggi.

Dalam lingkungan produksi, kami biasanya mengalokasikan memori yang cukup (misalnya 8GB-12GB) untuk sistem itu sendiri, basis data Apache (seperti MySQL /MariaDB), dan cache (seperti Redis / Memcached ), menyisakan 12GB-16GB memori yang sepenuhnya dialokasikan untuk PHP-FPM.

Berdasarkan penggunaan memori rata-rata 40MB-60MB per proses PHP , memori 1GB dapat menjalankan sekitar 16-25 proses.

Berikut ini adalah konfigurasi FPM berkinerja tinggi dan konkurensi tinggi yang dirancang khusus untuk Anda , yang dapat sangat meningkatkan kapasitas WordPress dan mencegahnya mengalami kerusakan akibat lonjakan lalu lintas yang tiba-tiba:

pm = dynamic

; 允许的最大 PHP 进程数(12GB 内存 / 40MB ≈ 300)
; 8核CPU搭配300个进程,可以轻松应对极高并发,且不至于让内存溢出
pm.max_children = 300

; 启动时创建的初始进程数(CPU核心数 * 4)
pm.start_servers = 32

; 维持的最小空闲进程数(服务器空闲时保留的进程,保证随时响应)
pm.min_spare_servers = 16

; 维持的最大空闲进程数(超过这个数量的空闲进程会被释放)
pm.max_spare_servers = 64

; 每个进程处理1000个请求后自动重启,高配置服务器可适当调大,有效防止WP插件内存泄露
pm.max_requests = 1000

; 单个请求最大执行时间,超时60秒强杀,防止死锁卡死
request_terminate_timeout = 60s

; 慢日志路径及触发阈值(请求超过5秒则记录,用于排查性能瓶颈)
slowlog = /var/log/php8.5-fpm.log.slow
request_slowlog_timeout = 5s

💡 Mengapa konfigurasi ini?

  1. pm.max_children = 300Ini adalah optimasi inti. Konfigurasi Anda sebelumnya dengan 50 proses terlalu konservatif untuk memori 24GB. Saat menghadapi lonjakan lalu lintas yang tiba-tiba (atau bot yang membanjiri latar belakang), 50 proses akan langsung kewalahan, menyebabkan waktu habis koneksi. Meningkatkannya menjadi 300 dapat meningkatkan kapasitas pemrosesan konkurensi server Anda beberapa kali lipat.
  2. pm.start_servers / `min_spare_serversKarena Anda memiliki 8 inti CPU, Anda dapat mempertahankan lebih banyak proses yang menganggur secara normal, sehingga memungkinkan Anda untuk memanfaatkan keunggulan multi-core agar permintaan baru dapat dibuka secara instan tanpa menunggu pembuatan proses.
  3. pm.max_requests = 1000Tingkatkan dari 500 menjadi 1000. Memori Anda besar, dan proses tidak perlu sering dihidupkan ulang. Meningkatkannya menjadi 1000 dapat mengurangi konsumsi CPU yang disebabkan oleh penghancuran dan pembuatan proses yang sering terjadi.

Lihat log yang lambat:

tail -f /var/log/php8.5-fpm.log.slow
tail -f /var/log/php8.4-fpm.log.slow

Setelah melakukan perubahan, ingatlah untuk memulai ulang layanan PHP-FPM agar perubahan tersebut berlaku.

systemctl restart php8.5-fpm

Aktifkan pemantauan status PHP-FPM untuk melacak kemajuan kapan saja

Mengaktifkan pemantauan proses PHP-FPM memungkinkan Anda untuk melihat jumlah proses aktif dan status tunggu permintaan kapan saja , sehingga mencegah kelebihan beban server.

php-fpm.conf Ditambahkan dalam:

pm.status_path = /status

Kemudian, konfigurasi Nginx:

location /status {
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    allow 127.0.0.1;
    deny all;
}

Dengan cara ini, Anda bisa http://yourdomain.com/status Lihat PHP-FPM beraksi!

Optimalkan log PHP-FPM untuk memecahkan masalah dengan cepat

php-fpm.conf Jawaban:

php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_value[log_errors] = On
php_admin_value[error_reporting] = E_ALL
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s  ; 执行超过 5s 的脚本记录到日志

Dengan cara ini, setiap kali terjadi kesalahan 500, Anda dapat langsung melihat log:

tail -f /var/log/php-fpm/error.log

Lihat apakah PHP melaporkan kesalahan, seperti out of memory,script execution timeout Tunggu.

Mulai ulang PHP-FPM secara teratur untuk mencegah kebocoran memori

bisa lulus cron Mulai ulang PHP-FPM secara teratur untuk mencegah proses yang berjalan lama menyebabkanKebocoran Memori.

crontab -e

Tambahkan tugas terjadwal berikut untuk memulai ulang PHP-FPM secara otomatis pada pukul 3 pagi setiap hari:

0 3 * * * /usr/sbin/service php8.5-fpm restart

Bagaimana jika masalahnya berlanjut? Optimasi lebih lanjut!

Jika Anda masih sesekali menemui kesalahan 500 setelah mengikuti optimasi di atas , Anda dapat melanjutkan dengan optimasi berikut:

1. Aktifkan OPcache untuk meningkatkan efisiensi eksekusi PHP

Jika OPcache belum diaktifkan, Anda dapat menginstalnya seperti ini (menggunakan Ubuntu sebagai contoh):

sudo apt install php8.5-opcache -y

Kemudian edit php.ini:

opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
  • opcache.validate_timestamps=0
  • Nonaktifkan deteksi waktu nyataMengurangi input/output sistem file dan meningkatkan kinerja.
  • Namun, ini berarti Anda harus membersihkan cache secara manual (memulai ulang layanan PHP) setelah memodifikasi file PHP.

Setelah memodifikasi konfigurasi, Anda harus memulai ulang layanan PHP agar perubahan tersebut berlaku.

sudo systemctl restart php<版本>-fpm

Memengaruhi? Kecepatan eksekusi halaman PHP telah ditingkatkan pesat!

2. Optimasi konfigurasi Nginx

Pastikan parameter terkait Nginx masuk akal, seperti fastcgi_read_timeout Sesuaikan dengan tepat untuk menghindari skrip PHP dihentikan oleh Nginx karena waktu eksekusi yang lama:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Ringkasan: Optimalkan PHP-FPM dan situs web tidak akan mogok lagi!

Penyesuaian apa yang telah kami buat setelah pengoptimalan ini?

✅ Mengoptimalkan kumpulan proses PHP-FPM,menggunakan ondemandDan mengoptimalkan pm.max_children parameter;
Membatasi waktu eksekusi skrip PHP, untuk mencegah penggunaan CPU dalam jangka panjang;
Aktifkan pemantauan PHP-FPM, melihat beban proses secara real time;
Mengoptimalkan log PHP-FPM, memecahkan masalah kesalahan 500 dengan cepat;
Mulai ulang PHP-FPM secara teratur, mencegah kebocoran memori;
Aktifkan OPcache, meningkatkan efisiensi eksekusi PHP;
Mengoptimalkan Konfigurasi Nginx, untuk menghindari masalah batas waktu.

Setelah pengoptimalan ini, beban PHP-FPM akan sangat berkurang dan operasi situs web akan lebih stabil! 🔥

Cobalah sekarang! 💪🚀

Jika Anda masih ingin mempelajari lebih lanjut tentang kustomisasi template PHP-FPM dengan HestiaCP, maka artikel ini akan memberikan pemahaman yang lebih mendalam:

👉 Template PHP-FPM Kustom HestiaCP: Rahasia Optimasi Performa PHP 8.5 ▼

Dalam konten ini, Anda akan melihat:

  • Teknik optimasi konkurensi tinggi: Bagaimana meningkatkan kecepatan respons melalui konfigurasi proses yang wajar.
  • Solusi isolasi keamanan: Hindari risiko akses lintas situs dan pastikan stabilitas akun.
  • Log dan pemantauan: Gunakan log kecepatan rendah untuk menemukan hambatan dan terus mengoptimalkan kinerja situs web.

发表 评论

您的邮箱地址不会被公开。必填项已用*标注

Gulir ke Atas