HestiaCP PHP-FPM berada di bawah beban berat? Ralat halaman web dinamik 500? Pengoptimuman ini akan berkuat kuasa serta-merta!

Pernahkah anda menghadapi situasi ini? Laman web anda tiba-tiba menjadi perlahan, atau memaparkan ralat 500. Memulakan semula PHP-FPM akan mengembalikannya kepada normal , tetapi masalah itu muncul semula selepas beberapa ketika? Ia sangat mengecewakan!

Mengapa ini berlaku? Sebenarnya, ini biasanya disebabkan oleh konfigurasi kumpulan proses PHP-FPM yang tidak betul atau sumber pelayan yang tidak mencukupi . Hari ini, kami akan mengoptimumkan PHP-FPM secara menyeluruh di bawah HestiaCP untuk memastikan kestabilan laman web anda yang kukuh!

Sebab utama mengapa PHP-FPM terlebih beban

PHP-FPM ialah pengurus proses untuk PHP , yang bertanggungjawab mengendalikan permintaan dinamik. Konfigurasi yang tidak sesuai boleh menyebabkan:

  • Sumber pelayan habis, menyebabkan PHP-FPM tidak dapat membalas permintaan baharu tepat pada masanya;
  • Terlalu sedikit proses, apabila trafik tiba-tiba meningkat, ia tidak dapat diproses dalam masa;
  • Penggunaan proses terlalu tinggi, menyebabkan beban CPU meletup.

HestiaCP PHP-FPM berada di bawah beban berat? Ralat halaman web dinamik 500? Pengoptimuman ini akan berkuat kuasa serta-merta!

Bagaimana untuk mengetahui sama ada PHP-FPM terlebih beban?

boleh digunakan tophtop Perintah untuk melihat penggunaan CPU dan memori:

top -c

Jika anda melihat maklumat proses yang serupa dengan yang berikut, ini bermakna PHP-FPM berjalan di bawah 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

Adakah anda melihat proses ini menggunakan lebih daripada 70% CPU? Jika ini berlaku dengan kerap, maka pasti ada sesuatu yang tidak kena dengan PHP-FPM anda!

Jadi, bagaimanakah kita boleh mengoptimumkan konfigurasi PHP-FPM supaya pelayan tidak lagi terbeban?

Pengoptimuman kumpulan proses PHP-FPM (pelarasan parameter teras)

Pertama, buka php-fpm Fail konfigurasi:

sudo nano /etc/php/*/fpm/pool.d/www.conf
  • *Tukar kepada versi PHP anda, seperti PHP8.5, dan tukar kepada ini:/etc/php/8.3/fpm/pool.d/www.conf

Tanya versi PHP yang ditetapkan oleh HestiaCP

v-list-web-domain user domain.com

Cth:

v-list-web-domain abc chenweiliang.com

Dalam output, anda akan melihat sesuatu seperti:

PHP SUPPORT      yes
PHP MODE        php-fpm
PHP VERSION     8.5 

Ini menunjukkan bahawa laman web tersebut menggunakan PHP 8.5.

Mari 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 boleh melihat bahawa anda pm digunakan ialah ondemand,Walaupun ia boleh mengurangkan penggunaan sumber semasa masa terbiar, apabila trafik meningkat secara tiba-tiba, proses itu mungkin tidak dapat bertindak balas dalam masa., mengakibatkan ralat 500.

www.conf: "Kolam sumber sejagat" terbina dalam sistem

Selepas memasang PHP-FPM, sistem akan secara automatik menyediakan anda dengan... www.conf fail.
ituKedudukanIa sangat mudah—ia hanyalah himpunan proses lalai yang berfungsi secara automatik, biasanya dilampirkan pada... www-data Muat turun pengguna.

Jenis kolam ini amat sesuai untuk persekitaran tapak tunggal: konfigurasinya ringan dan parameternya adalah templat generik, seperti:

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

Jika anda hanya mengehos satu laman web, anda boleh menggunakannya secara langsung dan andal tanpa sebarang kerumitan tambahan.

etufo.org.conf: Kolam tersuai

Sebaik sahaja anda menjalankan berbilang laman web, anda tidak boleh memastikan semua orang bersesak-sesak dalam kumpulan yang sama.
Pada ketika ini, HestiaCP akan mencipta kolam berasingan secara automatik untuk setiap tapak, contohnya... etufo.org.confKhusus untuk nama domain etufo.org 服务.

Cara bermain yang biasa dilakukan ialah:

  • Tukar pengguna dan kumpulan:user = etufo,group = etufo
  • Pemantauan bebas:listen = /run/php/etufo.sock
  • Melaraskan bilangan proses memastikan kestabilan yang kukuh walaupun di bawah keserentakan yang tinggi.
  • Fail log berasingan menjadikan penyelesaian masalah lebih jelas.

Manfaatnya jelas: pengasingan yang selamat . Walaupun satu tapak terjejas, tapak yang lain tetap tidak terjejas.

dummy.conf: fail dummy

dummy.conf Ini biasanya merupakan contoh atau templat yang disediakan oleh sistem.
Ia sebenarnya tidak akan berjalan melainkan anda mengubah suai dan mendayakannya secara manual.
Kepentingannya lebih seperti "manual operasi", yang memberitahu anda cara menulis konfigurasi kolam baharu.

Mengapa perlu bahagikan kolam renang?

  • 安全 性Gunakan pengguna yang berbeza untuk tapak yang berbeza bagi mengelakkan percanggahan kebenaran.
  • 性能优化Bilangan proses boleh dilaraskan secara individu untuk setiap kumpulan, membolehkan pelarasan fleksibel berdasarkan permintaan trafik.
  • PengasinganLog, ralat dan alamat pendengaran semuanya diasingkan, menjadikan penyelesaian masalah lebih mudah.

Contohnya, walaupun www.conf ranap, etufo.org.conf masih akan berjalan seperti biasa dan tidak akan menyebabkan keseluruhan pelayan tergendala.

实际场景

  • Pelayan tapak tunggal: www.conf sudah memadai.
  • Pelayan berbilang tapakSetiap laman web mempunyai fail .conf bebasnya sendiri, seperti etufo.org.conf.
  • dummy.confUntuk rujukan sahaja, tidak digalakkan.

Perbandingan Konfigurasi

www.conf (kumpulan lalai)

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

etufo.org.conf (Kolam Tersuai)

[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

Perbezaan utama ialah: identiti pengguna, alamat pendengaran dan bilangan proses.

1. Laraskan parameter kumpulan proses PHP-FPM

Jika konfigurasi menggunakan dynamicIni ialah kaedah pra-memulakan beberapa proses kerja dan melaraskannya secara dinamik mengikut volum permintaan, yang boleh bertindak balas dengan lebih pantas apabila volum permintaan meningkat secara tiba-tiba.

Untuk tapak web dengan jumlah trafik tertentu, adalah disyorkan untuk digunakan pm = dynamicKerana ia boleh mengekalkan sejumlah proses terbiar dan mengelakkan 500 ralat semasa konkurensi tinggi.

Adalah disyorkan untuk menggunakannya hanya apabila volum capaian sangat rendah dan sumber memori ketat. pm = ondemand Untuk menjimatkan sumber.

Dicadangkan untuk menukar kepada dynamic, dan mengoptimumkan pm.max_children Dan parameter lain:

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 mahu mengubahnya seperti ini?

  • pm = dynamic: Peruntukkan proses dengan lebih fleksibel untuk mengelakkan permintaan menunggu yang mungkin disebabkan oleh permintaan;
  • pm.max_children = 16: Cegah 500 ralat yang disebabkan oleh terlalu sedikit proses;
  • pm.start_servers = 5: Elakkan permulaan proses perlahan;
  • pm.max_requests = 3000:Mencegah kebocoran ingatan, mengitar semula proses dengan kerap.

2. Hadkan masa pelaksanaan skrip PHP untuk mengelakkan penghunian jangka panjang

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

Ini menghalang skrip PHP tertentu yang menggunakan CPU yang berlebihan daripada merosakkan pelayan.

Selepas menyimpan, mulakan semula proses PHP:

sudo systemctl restart php8.3-fpm

Optimumkan PHP-FPM berdasarkan konfigurasi VPS

Contoh konfigurasi VPS:

  • Penerangan: VPS 3 NVMe
  • Ruang Cakera: 300 GB
  • Teras CPU: 8
  • RAM: 24 GB

Berdasarkan konfigurasi VPS anda ( 8 teras CPU, 24 GB RAM ), sumber pelayan anda lebih daripada mencukupi. Untuk PHP-FPM, RAM 24 GB membolehkan anda mengkonfigurasi sejumlah besar proses serentak.

Dalam persekitaran pengeluaran, kita biasanya memperuntukkan memori yang mencukupi (katakan 8GB-12GB) untuk sistem itu sendiri, pangkalan data Apache (seperti MySQL /MariaDB), dan cache (seperti Redis / Memcached ), meninggalkan baki memori 12GB-16GB untuk diperuntukkan sepenuhnya kepada PHP-FPM.

Berdasarkan purata penggunaan memori 40MB-60MB setiap proses PHP , memori 1GB boleh menjalankan kira-kira 16-25 proses.

Berikut ialah konfigurasi FPM berprestasi tinggi serentak yang disesuaikan untuk anda , yang boleh meningkatkan kapasiti WordPress dengan ketara dan mencegahnya daripada ranap akibat lonjakan trafik secara 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 merupakan pengoptimuman teras. Konfigurasi 50 proses anda sebelum ini terlalu konservatif untuk memori 24GB. Apabila mengalami lonjakan trafik secara tiba-tiba (atau bot membanjiri latar belakang), 50 proses akan serta-merta terbeban, menyebabkan sambungan tamat masa. Meningkatkannya kepada 300 boleh meningkatkan kapasiti pemprosesan serentak pelayan anda beberapa kali ganda.
  2. pm.start_servers / `min_spare_serversOleh kerana anda mempunyai 8 teras CPU, pada mulanya dan biasanya anda boleh mengekalkan lebih banyak proses terbiar, yang membolehkan anda memanfaatkan kelebihan berbilang teras supaya permintaan baharu boleh dibuka serta-merta tanpa menunggu proses dibuat.
  3. pm.max_requests = 1000Tingkatkan daripada 500 kepada 1000. Memori anda besar dan proses tidak perlu dimulakan semula dengan kerap. Peningkatan kepada 1000 dapat mengurangkan penggunaan CPU yang disebabkan oleh pemusnahan dan penciptaan proses yang kerap.

Lihat log perlahan:

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

Selepas membuat perubahan, ingat untuk memulakan semula perkhidmatan PHP-FPM agar perubahan tersebut berkuat kuasa.

systemctl restart php8.5-fpm

Dayakan pemantauan status PHP-FPM untuk menjejaki kemajuan pada bila-bila masa

Mengaktifkan pemantauan proses PHP-FPM membolehkan anda melihat bilangan proses aktif dan status menunggu permintaan pada bila-bila masa , mencegah beban pelayan.

php-fpm.conf Ditambah 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 boleh http://yourdomain.com/status Lihat PHP-FPM dalam tindakan!

Optimumkan log PHP-FPM untuk menyelesaikan masalah dengan cepat

php-fpm.conf Tambahkan pada:

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, apabila ralat 500 berlaku, anda boleh terus melihat log:

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

Lihat jika PHP melaporkan ralat, seperti out of memory,script execution timeout Tunggu.

Mulakan semula PHP-FPM dengan kerap untuk mengelakkan kebocoran memori

mampu lulus cron Mulakan semula PHP-FPM dengan kerap untuk mengelakkan proses yang berjalan lama daripada menyebabkanKebocoran Memori.

crontab -e

Tambahkan tugas berjadual berikut untuk memulakan semula PHP-FPM secara automatik pada 3 pagi setiap hari:

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

Bagaimana jika masalah berterusan? Pengoptimuman selanjutnya!

Jika anda masih menemui ralat 500 sekali-sekala selepas mengikuti pengoptimuman di atas , anda boleh meneruskan dengan pengoptimuman berikut:

1. Dayakan OPcache untuk meningkatkan kecekapan pelaksanaan PHP

Jika OPcache belum didayakan lagi, anda boleh memasangnya 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
  • Lumpuhkan pengesanan masa nyataMengurangkan I/O sistem fail dan meningkatkan prestasi.
  • Walau bagaimanapun, ini bermakna anda mesti mengosongkan cache secara manual (mulakan semula perkhidmatan PHP) selepas mengubah suai fail PHP.

Selepas mengubah suai konfigurasi, anda mesti memulakan semula perkhidmatan PHP agar perubahan tersebut berkuat kuasa.

sudo systemctl restart php<版本>-fpm

Kesan? Kelajuan pelaksanaan halaman PHP telah dipertingkatkan!

2. Pengoptimuman konfigurasi Nginx

Pastikan bahawa parameter berkaitan Nginx adalah munasabah, seperti fastcgi_read_timeout Laraskannya dengan sewajarnya untuk mengelakkan skrip PHP ditamatkan oleh Nginx kerana masa pelaksanaan yang lama:

fastcgi_read_timeout 60s;
client_max_body_size 100M;

Ringkasan: Optimumkan PHP-FPM dan tapak web tidak akan ranap lagi!

Apakah pelarasan yang telah kami buat selepas pengoptimuman ini?

✅ Mengoptimumkan kumpulan proses PHP-FPM, gunakan ondemandDan mengoptimumkan pm.max_children parameter;
Mengehadkan masa pelaksanaan skrip PHP, untuk mengelakkan penggunaan CPU jangka panjang;
Dayakan pemantauan PHP-FPM, lihat beban proses dalam masa nyata;
Mengoptimumkan log PHP-FPM, cepat selesaikan masalah 500 ralat;
Mulakan semula PHP-FPM dengan kerap, mengelakkan kebocoran ingatan;
Dayakan OPcache, meningkatkan kecekapan pelaksanaan PHP;
Mengoptimumkan Konfigurasi Nginx, untuk mengelakkan masalah tamat masa.

Selepas pengoptimuman ini, beban PHP-FPM akan dikurangkan dengan banyak dan operasi laman web akan menjadi lebih stabil! 🔥

Pergi cuba sekarang! 💪🚀

Jika anda masih ingin mengetahui lebih lanjut tentang menyesuaikan templat PHP-FPM dengan HestiaCP, maka artikel ini akan memberi anda pemahaman yang lebih mendalam:

👉 Templat PHP-FPM Tersuai HestiaCP: Rahsia Pengoptimuman Prestasi PHP 8.5 ▼

Dalam kandungan ini, anda akan melihat:

  • Teknik pengoptimuman serentak tinggi: Cara meningkatkan kelajuan tindak balas melalui konfigurasi proses yang munasabah.
  • Penyelesaian pengasingan keselamatan: Elakkan risiko akses merentas tapak dan pastikan kestabilan akaun.
  • Log dan pemantauan: Gunakan log perlahan untuk mencari kesesakan dan mengoptimumkan prestasi laman web secara berterusan.

发表 评论

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

Tatal ke