Rumah > pembangunan bahagian belakang > masalah PHP > PHP memperincikan cara untuk meningkatkan konkurensi

PHP memperincikan cara untuk meningkatkan konkurensi

WBOY
Lepaskan: 2023-03-16 18:00:02
ke hadapan
1542 orang telah melayarinya

Artikel ini membawakan anda pengetahuan yang berkaitan tentang PHP Terutamanya ia memperkenalkan penyelesaian untuk meningkatkan kesesuaian dalam PHP Artikel ini memperkenalkannya secara terperinci melalui kod contoh, yang sangat berguna untuk kajian atau kerja semua orang mempunyai rujukan dan nilai pembelajaran tertentu. Mari kita lihat bersama-sama.

(Tutorial disyorkan: Tutorial video PHP)

Artikel ini telah memasukkan nota kajian pengaturcaraan gitee. Meliputi PHP, JavaScript, Linux, Golang, MySQL, Redis, alatan sumber terbuka, dsb.

PHP yang digunakan dalam persekitaran pengeluaran perlu dioptimumkan untuk membolehkan PHP sendiri berprestasi lebih baik Selain menulis kod PHP, penalaan php-fpm dan php.ini juga mesti dikonfigurasikan. Artikel ini menerangkan penalaan konfigurasi php.ini dari aspek memori, OPcache, muat naik, sesi dan keselamatan.

Berbanding dengan bahasa tersusun lain, kelemahan terbesar PHP ialah setiap permintaan memerlukan beberapa penghuraian modul, dan apa yang sebenarnya dilaksanakan ialah proses kerja. Memulakan proses kerja memerlukan lebih banyak sumber. Pada masa yang sama, setiap permintaan akan menghuraikan semula beberapa kod, menghasilkan penghuraian berulang.

Untuk pengoptimuman PHP, anda boleh menumpukan pada aspek ini untuk mempertimbangkan pengoptimuman.

Pengoptimuman Memori

Apabila menjalankan PHP, anda perlu mengambil berat tentang jumlah memori yang digunakan oleh setiap proses PHP Tetapan memory_limit dalam php.ini digunakan untuk menetapkan memori sistem maksimum yang a proses PHP tunggal boleh menggunakan nilai.

Nilai lalai tetapan ini ialah 128M, yang mungkin sesuai untuk kebanyakan aplikasi PHP bersaiz kecil dan sederhana Namun, jika anda menjalankan aplikasi micro-PHP, anda boleh menurunkan nilai ini untuk menjimatkan sumber sistem . Sebaliknya, jika anda menjalankan aplikasi PHP intensif memori, anda boleh meningkatkan nilai ini. Saiz nilai ini ditentukan oleh memori sistem yang tersedia. Menentukan berapa banyak nilai untuk diperuntukkan kepada PHP adalah seni Apabila memutuskan berapa banyak memori untuk diperuntukkan kepada PHP dan berapa banyak proses PHP-FPM yang mampu, ia boleh dinilai berdasarkan. pada maklumat dimensi berikut:

  • Berapa banyak memori boleh diperuntukkan kepada PHP? Ambil VPS dengan memori 2G sebagai contoh Peranti ini juga boleh menjalankan proses lain, seperti MySQL, Nginx, dll., jadi adalah wajar untuk meninggalkan 512M untuk PHP.
  • Berapa banyak memori yang digunakan setiap proses PHP secara purata? Untuk memantau penggunaan memori proses, anda boleh menggunakan arahan baris arahan top, atau anda boleh memanggil fungsi memory_get_peak_usage() dalam skrip PHP Tidak kira kaedah yang digunakan, anda mesti menjalankan skrip yang sama beberapa kali dan kemudian ambil nilai purata penggunaan memori.
  • Berapa banyak proses PHP-FPM yang anda mampu bayar? Katakan saya memperuntukkan memori 512M kepada PHP dan setiap proses PHP menggunakan purata memori 15M, maka saya mampu membeli 34 proses PHP-FPM.

Adakah sumber sistem mencukupi? Akhir sekali, anda perlu mengesahkan bahawa terdapat sumber sistem yang mencukupi untuk menjalankan aplikasi PHP dan mengendalikan trafik yang dijangkakan. Untuk maklumat konfigurasi PHP khusus, sila rujuk fail konfigurasi php-fpm.config.

; Had masa untuk kanak-kanak memproses untuk menunggu tindak balas pada isyarat daripada tuan.
Unit yang tersedia: s(econd), m(inutes), h(ours), atau d(; ays)
; Unit Lalai: saat
; Nilai Lalai: 0
; process_control_timeout = 0

Bilangan maksimum proses FPM telah direka untuk mengawal
; bilangan proses global apabila menggunakan PM dinamik dalam banyak kumpulan.
; Gunakannya dengan berhati-hati.
; process.max = 128

; Nyatakan keutamaan (2) yang bagus untuk digunakan pada proses induk (hanya jika ditetapkan)

Nilai boleh berbeza dari -19 (keutamaan tertinggi) hingga 20 (keutamaan terendah )

; Nota: - Ia hanya akan berfungsi jika proses induk FPM dilancarkan sebagai akar
- Proses kumpulan akan mewarisi keutamaan proses induk
kecuali dinyatakan sebaliknya
; set
; process.priority = -19

; Hantar FPM ke latar belakang untuk mengekalkan FPM di latar depan untuk penyahpepijatan.

;



php-fpm mempunyai tiga mod operasi, iaitu bilangan proses tetap, bilangan proses atas permintaan dan bilangan proses dinamik sepenuhnya.

Bilangan proses atas permintaan, beberapa proses dimulakan secara lalai Jika jumlahnya terlalu besar, beberapa proses baharu akan dibuat secara dinamik Selepas permintaan selesai, proses yang baru dibuat dimusnahkan.

    Betulkan bilangan proses Secara lalai, beberapa proses ditetapkan Jika bilangan proses tidak mencukupi, permintaan baharu akan menunggu dan tidak akan diproses sehingga proses lain selesai diproses.
  • Bilangan proses dinamik sepenuhnya bermakna ia dikawal sepenuhnya oleh jumlah permintaan Satu proses dibuat untuk setiap permintaan dan dimusnahkan selepas diproses.
  • Dayakan pecutan prestasi Zend OPcache
Selepas menentukan jumlah memori untuk diperuntukkan, anda boleh mengkonfigurasi sambungan Zend OPcache PHP. OPcache terutamanya menghuraikan beberapa kod ke dalam bytecode, jadi tidak perlu menghuraikan dan menyusun bahagian kod ini berulang kali dalam permintaan seterusnya. Mengurangkan proses penyusunan dan penghuraian juga boleh meningkatkan kelajuan pemprosesan PHP.

PHP5.5.0 mempunyai sambungan terbina dalam ini Berikut adalah beberapa maklumat konfigurasi yang diperlukan:

opcache.memory_consumption = 64: Memori yang diperuntukkan untuk cache opcode (unit ialah MB), amaun memori yang diperuntukkan sepatutnya boleh. untuk disimpan Kod op yang diperoleh dengan menyusun semua skrip PHP dalam aplikasi Nilai ini boleh ditetapkan kepada saiz yang berbeza mengikut saiz aplikasi.

opcache.interned_strings_buffer = 16: Jumlah memori yang digunakan untuk menyimpan rentetan pemastautin (unit ialah MB Apakah rentetan pemastautin? Di sebalik tabir, jurubahasa PHP akan mencari beberapa contoh rentetan yang sama dan menyimpan rentetan dalam ingatan Jika rentetan yang sama digunakan semula, jurubahasa PHP akan menggunakan penunjuk. Secara lalai, rentetan pemastautin PHP akan diasingkan dalam setiap proses PHP Tetapan ini membenarkan kumpulan proses PHP-FPM menyimpan semua rentetan pemastautin proses dalam penimbal dikongsi supaya ia boleh diproses dalam rentetan proses PHP-FPM dirujuk antara pelbagai proses, yang menjimatkan lebih banyak memori.

opcache.max_accelerated_files = 4000: Bilangan maksimum skrip PHP yang boleh disimpan dalam cache opcode Julat nilai ini adalah antara 2000 dan 100000. Nilai ini mestilah lebih besar daripada bilangan fail dalam aplikasi PHP. .

opcache.validate_timestamps = 1: Apabila nilai tetapan ini ialah 1, PHP akan menyemak sama ada kandungan skrip PHP telah berubah selepas tempoh masa semakan ditentukan oleh tetapan opcache.revalidate_freq. Jika nilai tetapan ini ialah 0, PHP tidak akan menyemak sama ada kandungan skrip PHP telah berubah, dan kami mesti mengosongkan opcode yang dicache sendiri. Adalah disyorkan untuk menetapkannya kepada 1 dalam persekitaran pembangunan dan 0 dalam persekitaran pengeluaran.

opcache.revalidate_freq = 0: Tetapkan kekerapan (dalam saat) untuk menyemak sama ada kandungan skrip PHP telah berubah. Maksud menetapkan kepada 0 saat ialah fail PHP akan disahkan semula pada setiap permintaan hanya jika opcache.validate_timestamps ditetapkan kepada 1, jadi dalam persekitaran pembangunan fail PHP akan disahkan semula setiap kali, tetapi tidak dalam persekitaran pengeluaran mengesahkan.

opcache.fast_shutdown = 1: Tetapan ini membenarkan opcode menggunakan langkah penutupan yang lebih pantas, meninggalkan pemusnahan objek dan pelepasan memori kepada pengurus memori Zend Engine.

Muat Naik Fail

Jika aplikasi anda membenarkan muat naik fail, sebaiknya tetapkan saiz fail maksimum yang boleh dimuat naik. Selain itu, sebaiknya tetapkan bilangan maksimum fail yang boleh dimuat naik pada masa yang sama:

file_uploads = 1
upload_max_filesize = 10M
max_file_uploads = 3
Salin selepas log masuk

Secara lalai, PHP membenarkan 20 fail dimuat naik dalam satu permintaan dan maksimum yang dimuat naik fail adalah 2MB Di sini saya menetapkan bahawa satu permintaan hanya boleh memuat naik sehingga 3 fail, dan setiap fail boleh mencapai sehingga 10MB. Jangan tetapkan nilai ini terlalu tinggi, jika tidak, tamat masa akan berlaku.

Nota: Jika anda perlu memuat naik fail besar, konfigurasi pelayan web mesti dilaraskan dengan sewajarnya. Selain tetapan dalam php.ini, laraskan tetapan client_max_body_size dalam konfigurasi hos maya Nginx.

Selain itu, jika anda memuat naik fail yang lebih besar, saya syorkan menggunakan komponen muat naik khusus Webuploader Bahagian hadapan menghiris fail besar, dan PHP bahagian belakang menggabungkan data yang dipecahkan untuk memulihkan fail. Untuk maklumat tentang aplikasi WebUploader, sila rujuk artikel di tapak ini: Komponen muat naik fail berkuasa-WebUploader.

Masa pelaksanaan

max_execution_time digunakan untuk menetapkan masa maksimum satu proses PHP boleh dijalankan sebelum ditamatkan. Tetapan ini lalai kepada 30 saat, dan disyorkan untuk menetapkannya kepada 5 saat:

max_execution_time = 5
Salin selepas log masuk

Anda boleh memanggil fungsi set_limit_time() dalam skrip PHP untuk mengatasi tetapan ini.

Andaikan kami ingin menjana laporan dan membuat keputusan menjadi fail PDF Tugas ini mungkin mengambil masa 10 minit untuk diselesaikan, dan kami pasti tidak mahu membuat permintaan PHP menunggu selama 10 minit tulis fail PHP yang berasingan, Biarkan ia dilaksanakan dalam proses latar belakang yang berasingan, dan hanya memerlukan beberapa milisaat untuk aplikasi web menghasilkan proses latar belakang yang berasingan dan mengembalikan respons HTTP.

Sebenarnya, apabila kami menjalankan tugas yang mengambil masa yang lama untuk diselesaikan, kami biasanya menggunakan proses latar belakang Contohnya, kami boleh menggunakan sambungan swole PHP untuk menjana laporan dan menghantar e-mel secara berkelompok, yang mengambil masa yang lama. .

Sesi Pemprosesan

Secara lalai, PHP menyimpan maklumat yang dijana oleh sesi dalam cakera, seperti maklumat sesi yang dipanggil. Apabila mencipta dan membaca sesi, operasi I/O dilakukan pada cakera Membaca dan menulis cakera sebenarnya merupakan operasi yang agak memakan masa. Dan sesi tidak sesuai untuk memproses mekanisme sesi aplikasi yang diedarkan. Adalah disyorkan untuk meletakkannya dalam perkhidmatan dalam memori seperti Redis dan memcached, yang mempunyai kelajuan baca dan tulis yang pantas dan boleh diproses oleh mekanisme sesi teragih.

Contoh berikut menyimpan maklumat seperti sesi dalam memori memcached.

session.save_handler = "memcached"
session.save_path = "服务地址:端口号"
Salin selepas log masuk

Penimbal

Rangkaian akan menjadi lebih cekap jika ia menghantar lebih banyak data dalam bahagian yang lebih sedikit dan bukannya menghantar lebih sedikit data dalam lebih banyak bahagian Tinggi, iaitu, menghantar kandungan ke penyemak imbas pelawat dalam serpihan yang lebih sedikit boleh mengurangkan jumlah permintaan HTTP.

Oleh itu, kita perlu membiarkan PHP menimbal output Secara lalai, PHP telah mendayakan fungsi penimbal output PHP 4096 bait output sebelum menghantar kandungan ke pelayan Web.

output_buffering = 4096
implicit_flush = false
Salin selepas log masuk

如果想要修改输出缓冲区的大小,确保使用的值是4(32位系统)或8(64位系统)的倍数。

安全设置

open_basedir:使用open_basedir选项能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问不应该访问的文件,一定程度上限制了phpshell的危害。我们一般可以设置为只能访问网站目录:

open_basedir = /data/www
Salin selepas log masuk

disable_functions:一般我们要禁止系统函数和禁止任何文件和目录的操作,如:

disable_functions = '.....'
Salin selepas log masuk

expose_php = Off:将此项设置为false即不会再header头输出PHP版本信息。

display_errors = Off:生产环境中,我们应该禁止错误提示,如果是本地开发环境,可以设置为On。

log_errors = On:建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因。

error_log:设置PHP错误日志存放的目录。

(推荐教程:PHP视频教程

Atas ialah kandungan terperinci PHP memperincikan cara untuk meningkatkan konkurensi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:jb51.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan