Rumah php教程 php手册 PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析

PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析

Jun 13, 2016 pm 12:05 PM
100% cpu file get php-cgi dan perhubungan fungsi menganalisis saya daripada proses lulus

后来,我通过跟踪发现,这类情况的出现,跟 PHP 的 file_get_contents() 函数有着密切的关系。
  大、中型网站中,基于 HTTP 协议的 API 接口调用,是家常便饭。PHP 程序员们喜欢使用简单便捷的 file_get_contents("http://example.com/") 函数,来获取一个 URL 的返回内容,但是,如果 http://example.com/ 这个网站响应缓慢,file_get_contents() 就会一直卡在那儿,不会超时。
  我们知道,在 php.ini 中,有一个参数 max_execution_time 可以设置 PHP 脚本的最大执行时间,但是,在 php-cgi(php-fpm) 中,该参数不会起效。真正能够控制 PHP 脚本最大执行时间的是 php-fpm.conf 配置文件中的以下参数: The timeout (in seconds) for serving a single request after which the worker process will be terminated
Should be used when 'max_execution_time' ini option does not stop script execution for some reason
'0s' means 'off'
0s
  默认值为 0 秒,也就是说,PHP 脚本会一直执行下去。这样,当所有的 php-cgi 进程都卡在 file_get_contents() 函数时,这台 Nginx+PHP 的 WebServer 已经无法再处理新的 PHP 请求了,Nginx 将给用户返回“502 Bad Gateway”。修改该参数,设置一个 PHP 脚本最大执行时间是必要的,但是,治标不治本。例如改成 30s,如果发生 file_get_contents() 获取网页内容较慢的情况,这就意味着 150 个 php-cgi 进程,每秒钟只能处理 5 个请求,WebServer 同样很难避免“502 Bad Gateway”。
  要做到彻底解决,只能让 PHP 程序员们改掉直接使用 file_get_contents("http://example.com/") 的习惯,而是稍微修改一下,加个超时时间,用以下方式来实现 HTTP GET 请求。要是觉得麻烦,可以自行将以下代码封装成一个函数。

复制代码 代码如下:


$ctx = stream_context_create(array(
'http' => array(
'timeout' => 1 //设置一个超时时间,单位为秒
)
)
);
file_get_contents("http://example.com/", 0, $ctx);
?>


  当然,导致 php-cgi 进程 CPU 100% 的原因不只有这一种,那么,怎么确定是 file_get_contents() 函数导致的呢?
  首先,使用 top 命令查看 CPU 使用率较高的 php-cgi 进程。

复制代码 代码如下:


top - 10:34:18 up 724 days, 21:01, 3 users, load average: 17.86, 11.16, 7.69
Tasks: 561 total, 15 running, 546 sleeping, 0 stopped, 0 zombie
Cpu(s): 5.9%us, 4.2%sy, 0.0%ni, 89.4%id, 0.2%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 8100996k total, 4320108k used, 3780888k free, 772572k buffers
Swap: 8193108k total, 50776k used, 8142332k free, 412088k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10747 www 18 0 360m 22m 12m R 100.6 0.3 0:02.60 php-cgi
10709 www 16 0 359m 28m 17m R 96.8 0.4 0:11.34 php-cgi
10745 www 18 0 360m 24m 14m R 94.8 0.3 0:39.51 php-cgi
10707 www 18 0 360m 25m 14m S 77.4 0.3 0:33.48 php-cgi
10782 www 20 0 360m 26m 15m R 75.5 0.3 0:10.93 php-cgi
10708 www 25 0 360m 22m 12m R 69.7 0.3 0:45.16 php-cgi
10683 www 25 0 362m 28m 15m R 54.2 0.4 0:32.65 php-cgi
10711 www 25 0 360m 25m 15m R 52.2 0.3 0:44.25 php-cgi
10688 www 25 0 359m 25m 15m R 38.7 0.3 0:10.44 php-cgi
10719 www 25 0 360m 26m 16m R 7.7 0.3 0:40.59 php-cgi


  找其中一个 CPU 100% 的 php-cgi 进程的 PID,用以下命令跟踪一下:

复制代码 代码如下:


strace -p 10747
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0})
poll([{fd=6, events=POLLIN}], 1, 0) = 0 (Timeout)


  那么,就可以确定是 file_get_contents() 导致的问题了。
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

144-teras, SRAM bertindan 3D: Fujitsu memperincikan pemproses pusat data generasi akan datang MONAKA 144-teras, SRAM bertindan 3D: Fujitsu memperincikan pemproses pusat data generasi akan datang MONAKA Jul 29, 2024 am 11:40 AM

Menurut berita dari laman web ini pada 28 Julai, media asing TechRader melaporkan bahawa Fujitsu memperkenalkan secara terperinci pemproses FUJITSU-MONAKA (selepas ini dirujuk sebagai MONAKA) yang dirancang untuk dihantar pada 2027. MONAKACPU adalah berdasarkan seni bina "3D asli awan" dan menggunakan set arahan Arm Ia berorientasikan pusat data, tepi dan medan telekomunikasi Ia sesuai untuk pengkomputeran AI dan boleh merealisasikan RAS1 peringkat kerangka utama. Fujitsu berkata bahawa MONAKA akan mencapai lonjakan dalam kecekapan dan prestasi tenaga: terima kasih kepada teknologi seperti teknologi voltan ultra-rendah (ULV), CPU boleh mencapai kecekapan tenaga 2 kali ganda produk pesaing pada tahun 2027, dan penyejukan tidak memerlukan penyejukan air. ; sebagai tambahan, prestasi aplikasi pemproses Ia juga boleh mencapai dua kali lebih banyak daripada lawan anda. Dari segi arahan, MONAKA dilengkapi dengan vektor

AM4 enggan mati, berita mengatakan AMD akan melancarkan Ryzen 9 5900XT/7 5800XT: mencatatkan masa sehingga 4.8GHz AM4 enggan mati, berita mengatakan AMD akan melancarkan Ryzen 9 5900XT/7 5800XT: mencatatkan masa sehingga 4.8GHz Jun 05, 2024 pm 09:43 PM

Menurut berita dari laman web ini pada 1 Jun, sumber @CodeCommando tweet hari ini, berkongsi beberapa tangkapan skrin dokumen persembahan AMD yang akan datang pada acara Computex2024 Kandungan tweet itu ialah "AM4 tidak akan mati", dan gambar yang disertakan menunjukkan dua yang baharu Pemproses siri Ryzen5000XT. Menurut tangkapan skrin, dua produk berikut ditunjukkan: Ryzen95900XTR Ryzen95900XT berkedudukan agak tinggi Ini ialah pemproses AM4 16-teras baharu dengan kelajuan jam lebih rendah sedikit daripada Ryzen95950X AMD. Ryzen75800XT Ia adalah varian yang lebih pantas daripada pemproses sedia ada AMD Ryzen75800X Kedua-dua pemproses ini mencatatkan masa sehingga 4.8G

Kebocoran mendedahkan spesifikasi utama Intel Arrow Lake-U, -H, -HX dan -S Kebocoran mendedahkan spesifikasi utama Intel Arrow Lake-U, -H, -HX dan -S Jun 15, 2024 pm 09:49 PM

IntelArrowLake dijangka akan dibebaskan pada seni bina pemproses yang sama sebagai LunarLake, yang bermaksud bahawa teras prestasi LionCoveIntel yang baru akan digabungkan dengan teras kecekapan Skymonte yang ekonomi.

Penyelesaian kepada isu kestabilan pemproses Intel generasi ke-13 dan ke-14 Penyelesaian kepada isu kestabilan pemproses Intel generasi ke-13 dan ke-14 Jun 18, 2024 pm 06:01 PM

Pemproses generasi ke-13 dan ke-14 mengalami ranap permainan, skrin biru kematian, komputer dimulakan semula secara automatik dan kesalahan lain sebelum ini disyaki berpunca daripada kad grafik nvidia, ia adalah kesalahan pemproses Intel menyalahkan isu kestabilan pemproses generasi ke-13/14 Untuk pengeluar motherboard dan sistem BIOS. Kini Intel juga telah mencadangkan penyelesaian Mari kita lihat dengan editor di bawah. Ada kemungkinan bahawa pilihan tetapan dalam BIOS papan induk siri 600 dan 700 yang melibatkan voltan, kekerapan, penggunaan kuasa dan kestabilan pemproses Teras generasi ke-13 dan ke-14 tidak ditetapkan dengan betul, atau nilai tetapan berada di luar julat secara rasmi. dibenarkan oleh Intel Ia akan menyebabkan atau meningkatkan risiko operasi pemproses yang tidak stabil adalah seperti berikut (lihat rajah di bawah): [C

Koleksi lengkap formula fungsi excel Koleksi lengkap formula fungsi excel May 07, 2024 pm 12:04 PM

1. Fungsi SUM digunakan untuk menjumlahkan nombor dalam lajur atau sekumpulan sel, contohnya: =SUM(A1:J10). 2. Fungsi AVERAGE digunakan untuk mengira purata nombor dalam lajur atau sekumpulan sel, contohnya: =AVERAGE(A1:A10). 3. Fungsi COUNT, digunakan untuk mengira bilangan nombor atau teks dalam lajur atau sekumpulan sel, contohnya: =COUNT(A1:A10) 4. Fungsi IF, digunakan untuk membuat pertimbangan logik berdasarkan syarat yang ditentukan dan mengembalikan hasil yang sepadan.

Intel mengesahkan platform LGA9324 Oak Stream-AP menyokong pemproses Diamond Rapids Xeon Intel mengesahkan platform LGA9324 Oak Stream-AP menyokong pemproses Diamond Rapids Xeon Aug 22, 2024 am 11:16 AM

Menurut berita dari tapak ini pada 22 Ogos, pengguna platform X 포시포시 (@harukaze5719) menyedari bahawa Intel menyenaraikan dua papan penyesuai yang sesuai untuk ujian bekalan kuasa platform LGA9324-OKS-AP di tapak web rasmi DESIGN-iNTOOLSstore. ▲Papan penyesuai versi BLU, sebagai tambahan kepada versi MERAH Intel menulis dalam perihalan kedua-dua produk ini bahawa platform LGA9324-OKS-APOakStream menyokong DiamondRapids, yang secara positif mengesahkan teras prestasi Xeon generasi seterusnya selepas Xeon 6 "GraniteRapids" Kewujudan pemproses dan platform yang sepadan. Maklumat semasa tentang pemproses DiamondRapids dan platform OakStream

Dilaporkan bahawa papan induk Intel Z890 dijangka dilengkapi dengan Thunderbolt 4 sebagai standard, dan paparan teras pemproses Arrow Lake-S merangkumi pelbagai saiz. Dilaporkan bahawa papan induk Intel Z890 dijangka dilengkapi dengan Thunderbolt 4 sebagai standard, dan paparan teras pemproses Arrow Lake-S merangkumi pelbagai saiz. May 07, 2024 pm 05:10 PM

Menurut berita dari laman web ini pada 7 Mei, blogger Jinzhu Upgrade Package baru-baru ini mengumumkan bahawa pemproses desktop generasi akan datang Intel ArrowLake-S akan menyertakan berbilang versi grafik teras, dan papan induk Z890 yang menyokong dijangka dilengkapi dengan Thunderbolt. 4 antara muka sebagai standard. Menurut berita semasa, CPU siri ArrowLake-S akan menggunakan paparan teras spesifikasi GT1 dan mempunyai sehingga 4 teras Xe (iaitu 64EU). Walau bagaimanapun, Intel masih akan "mempamerkan" kemahiran paparan terasnya dalam produk rendah, memotong model dengan hanya 3 atau bahkan 2 Xe-teras. Adalah menjadi amalan Intel untuk menurunkan skala paparan teras produk rendah Pemproses Teras Ultra5125H yang dilancarkan pada masa ini hanya mengandungi 7 teras Xe, yang lebih rendah daripada produk siri Meteor Lake-P.

Saiz CPU Intel dan isu penjadualan teras, saiz CPU dan tetapan pengoptimuman teras melebihi 12 generasi Saiz CPU Intel dan isu penjadualan teras, saiz CPU dan tetapan pengoptimuman teras melebihi 12 generasi Jun 19, 2024 am 01:42 AM

CPU Inteli5-12600 dan ke atas, CPU i5-13400 dan ke atas mempunyai teras prestasi P-Core (teras besar) dan teras kecekapan tenaga E-Core (teras kecil Disebabkan masalah penjadualan "teras besar dan kecil", sesetengah permainan). mungkin menjatuhkan bingkai , ketinggalan, tidak sebagus CPU lama sebelum ini, sebenarnya, sistem berpendapat bahawa untuk mengatasi adegan semasa, yang lebih muda boleh mengendalikannya, dan tidak perlu menghantar yang lebih lama, jadi yang lebih tua. teras yang lebih tua telah berehat dan tidak berfungsi. Editor di bawah akan mengajar anda cara menyelesaikan masalah ini. Buat dokumen teks baharu pada desktop, salin kandungan berikut, simpan sebagai 1.reg, dan kemudian klik kanan untuk bergabung. WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SY

See all articles