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

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.

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

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-fpm

Aktifkan 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! 💪🚀

发表 评论

Alamat email Anda tidak akan dipublikasikan. 必填 项 已 用 * 标注

Gulir ke Atas