Direktori Artikel
- 1 Alasan utama mengapa PHP-FPM kelebihan beban
- 2 Optimasi kumpulan proses PHP-FPM (penyesuaian parameter inti)
- 3 Aktifkan pemantauan status PHP-FPM untuk melacak kemajuan kapan saja
- 4 Optimalkan log PHP-FPM untuk memecahkan masalah dengan cepat
- 5 Mulai ulang PHP-FPM secara teratur untuk mencegah kebocoran memori
- 6 Bagaimana jika masalahnya berlanjut? Optimasi lebih lanjut!
- 7 Ringkasan: Optimalkan PHP-FPM dan situs web tidak akan mogok lagi!
Pernahkah Anda mengalami situasi ini?Akses situs web tiba-tiba melambat, bahkan mengakibatkan kesalahan 500. Setelah memulai ulang PHP-FPM, akses kembali normal., tetapi masalahnya muncul kembali setelah beberapa saat? Ini sungguh membuat frustrasi!
Mengapa ini terjadi?Faktanya, hal ini biasanyaKumpulan proses PHP-FPM tidak dikonfigurasi dengan benar, atau sumber daya server tidak mencukupi.disebabkan oleh. Hari ini, kami akan mengoptimalkan secara menyeluruh HestiaCP PHP-FPM di balik layar membuat situs web stabil seperti batu!
Alasan utama mengapa PHP-FPM kelebihan beban
PHP-FPM adalahManajer Proses, yang bertanggung jawab untuk menangani permintaan dinamis. Jika konfigurasinya tidak masuk akal, hal ini 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.

Bagaimana cara mengetahui apakah PHP-FPM kelebihan beban?
bisa menggunakan top 或 htop 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
Lihat bagaimana proses ini memakan lebih dari 70% CPU? Jika hal ini sering terjadi, PHP-FPM Anda Pasti ada masalah!
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.3, 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.3
Ini berarti bahwa situs web tersebut menggunakan PHP 8.3.
Mari kita lihat konfigurasi PHP-FPM Anda:
[chenweiliang.com]
listen = /run/php/php8.3-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.
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 ondemand, 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 进程最大内存占用
Hal ini dapat mencegah beberapaSkrip PHP yang menggunakan terlalu banyak CPU dapat membuat server Anda mogok.
Setelah menyimpan, mulai ulang proses PHP:
sudo systemctl restart php8.3-fpmAktifkan pemantauan status PHP-FPM untuk melacak kemajuan kapan saja
Aktifkan pemantauan proses PHP-FPM dan lihat kapan sajaJumlah proses aktif saat ini dan status permintaan menunggu, untuk menghindari 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.3-fpm restart
Bagaimana jika masalahnya berlanjut? Optimasi lebih lanjut!
Jika Anda masih mengikuti optimasi di atasKadang-kadang terjadi kesalahan 500, Anda dapat melanjutkan dengan pengoptimalan 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.3-opcache -y
Kemudian edit php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1
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! 💪🚀
Harapan Chen Weiliang Blog ( https://www.chenweiliang.com/ ) membagikan "Beban PHP-FPM HestiaCP terlalu tinggi? Kesalahan halaman web dinamis 500? Pengoptimalan ini akan segera berlaku! ”, mungkin bermanfaat bagi Anda.
Selamat datang untuk membagikan tautan artikel ini:https://www.chenweiliang.com/cwl-32512.html
Untuk mengungkap lebih banyak trik tersembunyi🔑, selamat datang untuk bergabung di saluran Telegram kami!
Bagikan dan sukai jika Anda menyukainya! Bagikan dan suka Anda adalah motivasi kami yang berkelanjutan!