Heim Backend-Entwicklung PHP-Tutorial file_get_contents 导入CPU 100%解决办法_PHP教程

file_get_contents 导入CPU 100%解决办法_PHP教程

Jul 13, 2016 am 10:55 AM
100% cpu file get Weg 功能 导入 uns verwenden von 简单 解决

因为用到一个简单的功能,我们用到了file_get_contents 函数,这样它把CPU 100%经过分析确实了是它景起了,现在我们来看看引起cpu 100%的解决办法吧。

运行 Nginx、PHP-CGI(php-fpm) Web服务的 Linux 服务器,突然系统负载上升,使用 top 命令查看,很多 php-cgi 进程 CPU 使用率接近100%。后来,我通过跟踪发现,这类情况的出现,跟 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 cachedPID 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() 导致的问题了。

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/632262.htmlTechArticle因为用到一个简单的功能,我们用到了file_get_contents 函数,这样它把CPU 100%经过分析确实了是它景起了,现在我们来看看引起cpu 100%的解决办...
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Fünf Tipps, die Ihnen zeigen, wie Sie das Problem lösen können, dass sich das Black Shark-Telefon nicht einschaltet! Fünf Tipps, die Ihnen zeigen, wie Sie das Problem lösen können, dass sich das Black Shark-Telefon nicht einschaltet! Mar 24, 2024 pm 12:27 PM

Da sich die Smartphone-Technologie ständig weiterentwickelt, spielen Mobiltelefone eine immer wichtigere Rolle in unserem täglichen Leben. Als Flaggschiff-Telefon mit Schwerpunkt auf Spieleleistung erfreut sich das Black Shark-Telefon bei Spielern großer Beliebtheit. Manchmal sind wir jedoch auch mit der Situation konfrontiert, dass das Black Shark-Telefon nicht eingeschaltet werden kann. Zu diesem Zeitpunkt müssen wir einige Maßnahmen ergreifen, um dieses Problem zu lösen. Als Nächstes geben wir Ihnen fünf Tipps, wie Sie das Problem lösen können, dass sich das Black Shark-Telefon nicht einschaltet: Schritt 1: Überprüfen Sie zunächst die Akkuleistung. Stellen Sie zunächst sicher, dass Ihr Black Shark-Telefon über genügend Strom verfügt. Möglicherweise ist der Akku des Telefons leer

Der Betriebsprozess des WIN10-Diensthosts belegt zu viel CPU Der Betriebsprozess des WIN10-Diensthosts belegt zu viel CPU Mar 27, 2024 pm 02:41 PM

1. Zuerst klicken wir mit der rechten Maustaste auf die leere Stelle der Taskleiste und wählen die Option [Task-Manager] oder klicken mit der rechten Maustaste auf das Startlogo und wählen dann die Option [Task-Manager]. 2. In der geöffneten Task-Manager-Oberfläche klicken wir ganz rechts auf die Registerkarte [Dienste]. 3. Klicken Sie in der geöffneten Registerkarte [Dienst] unten auf die Option [Dienst öffnen]. 4. Klicken Sie im sich öffnenden Fenster [Dienste] mit der rechten Maustaste auf den Dienst [InternetConnectionSharing(ICS)] und wählen Sie dann die Option [Eigenschaften]. 5. Ändern Sie im sich öffnenden Eigenschaftenfenster die Option „Öffnen mit“ in „Deaktiviert“, klicken Sie auf „Übernehmen“ und dann auf „OK“. 6. Klicken Sie auf das Startlogo, dann auf die Schaltfläche zum Herunterfahren, wählen Sie [Neustart] und schließen Sie den Neustart des Computers ab.

144-Kerne, 3D-gestapelter SRAM: Fujitsu stellt den Rechenzentrumsprozessor MONAKA der nächsten Generation vor 144-Kerne, 3D-gestapelter SRAM: Fujitsu stellt den Rechenzentrumsprozessor MONAKA der nächsten Generation vor Jul 29, 2024 am 11:40 AM

Laut Nachrichten dieser Website vom 28. Juli berichteten die ausländischen Medien TechRader, dass Fujitsu den FUJITSU-MONAKA-Prozessor (im Folgenden als MONAKA bezeichnet) detailliert vorgestellt habe, dessen Auslieferung im Jahr 2027 geplant sei. MONAKACPU basiert auf der „Cloud Native 3D Many-Core“-Architektur und übernimmt den Arm-Befehlssatz. Es ist auf die Bereiche Rechenzentrum, Edge und Telekommunikation ausgerichtet. Es ist für KI-Computing geeignet und kann RAS1 auf Mainframe-Ebene realisieren. Fujitsu sagte, dass MONAKA einen Sprung in puncto Energieeffizienz und Leistung machen wird: Dank Technologien wie der Ultra-Low-Voltage-Technologie (ULV) kann die CPU im Jahr 2027 die doppelte Energieeffizienz von Konkurrenzprodukten erreichen, und für die Kühlung ist keine Wasserkühlung erforderlich Darüber hinaus kann die Anwendungsleistung des Prozessors doppelt so hoch sein wie die Ihres Konkurrenten. In puncto Anleitung ist MONAKA mit Vector ausgestattet

Der Unterschied zwischen vivox100s und x100: Leistungsvergleich und Funktionsanalyse Der Unterschied zwischen vivox100s und x100: Leistungsvergleich und Funktionsanalyse Mar 23, 2024 pm 10:27 PM

Sowohl die Mobiltelefone vivox100s als auch x100 sind repräsentative Modelle der Mobiltelefonproduktlinie von vivo. Sie repräsentieren jeweils das High-End-Technologieniveau von vivo in unterschiedlichen Zeiträumen. Daher weisen diese beiden Mobiltelefone gewisse Unterschiede in Design, Leistung und Funktionen auf. In diesem Artikel wird ein detaillierter Vergleich dieser beiden Mobiltelefone im Hinblick auf Leistungsvergleich und Funktionsanalyse durchgeführt, um Verbrauchern dabei zu helfen, das für sie geeignete Mobiltelefon besser auszuwählen. Schauen wir uns zunächst den Leistungsvergleich zwischen vivox100s und x100 an. vivox100s ist mit dem Neusten ausgestattet

AM4 will nicht sterben, laut Nachrichten wird AMD Ryzen 9 5900XT/7 5800XT auf den Markt bringen: getaktet mit bis zu 4,8 GHz AM4 will nicht sterben, laut Nachrichten wird AMD Ryzen 9 5900XT/7 5800XT auf den Markt bringen: getaktet mit bis zu 4,8 GHz Jun 05, 2024 pm 09:43 PM

Laut Nachrichten dieser Website vom 1. Juni hat die Quelle @CodeCommando heute getwittert und einige Screenshots der bevorstehenden Präsentationsdokumente von AMD auf der Computex2024-Veranstaltung geteilt. Der Inhalt des Tweets war „AM4 wird niemals sterben“, und das dazugehörige Bild zeigte zwei neue Prozessoren der Ryzen5000XT-Serie. Den Screenshots zufolge sind die folgenden zwei Produkte zu sehen: Ryzen95900XTR Ryzen95900XT ist relativ hochpreisig positioniert. Dabei handelt es sich um einen neuen 16-Kern-AM4-Prozessor mit einer Taktrate, die etwas niedriger ist als die von AMDs Ryzen95950X. Ryzen75800XT Es handelt sich um eine schnellere Variante des bestehenden Ryzen75800X-Prozessors. Beide Prozessoren sind mit bis zu 4,8 G getaktet

Leak enthüllt wichtige Spezifikationen von Intel Arrow Lake-U, -H, -HX und -S Leak enthüllt wichtige Spezifikationen von Intel Arrow Lake-U, -H, -HX und -S Jun 15, 2024 pm 09:49 PM

Intel Arrow Lake wird voraussichtlich auf der gleichen Prozessorarchitektur wie Lunar Lake basieren, was bedeutet, dass Intels brandneue Lion Cove-Leistungskerne mit den wirtschaftlichen Skymont-Effizienzkernen kombiniert werden. Während Lunar Lake nur als Ava verfügbar ist

Intel bringt die Amston Lake-Serie von Atom-Prozessoren für Edge- und Netzwerkmärkte auf den Markt Intel bringt die Amston Lake-Serie von Atom-Prozessoren für Edge- und Netzwerkmärkte auf den Markt Apr 09, 2024 pm 09:22 PM

Laut Nachrichten dieser Website vom 9. April hat Intel heute auf der Embedded World 2024 die Amston Lake-Serie von Atom-Prozessoren vorgestellt. Der Amston-Lake-Prozessor basiert auf dem Intel7-Prozess und unterstützt Single-Channel-Speicher. Er kann als Zweigvariante des Alder-Lake-N-Prozessors angesehen werden, einschließlich der Edge-orientierten Atom x7000RE-Serie und der netzwerkorientierten x7000C-Serie. Diese Seite berichtete über den Atom x7000E-Prozessor mit ADL-N-Architektur und bis zu vier Kernen im Jahr 2023, und die heutige x7000RE-Serie hat die Spezifikationen weiter erweitert: Sie kann bis zu 8-Kern-Atom x7835RE wählen, sowohl diesen Prozessor als auch den Vierkern-x7433RE Ausgestattet mit 32E

Lösungen für Stabilitätsprobleme bei Intel-Prozessoren der 13. und 14. Generation Lösungen für Stabilitätsprobleme bei Intel-Prozessoren der 13. und 14. Generation Jun 18, 2024 pm 06:01 PM

Bei Prozessoren der 13. und 14. Generation kam es zu Spielabstürzen, Bluescreens des Todes, automatischen Neustarts des Computers und anderen Fehlern. Nach einer Nachfrage von nvidia lag die Ursache kürzlich bei Intel machte die Stabilitätsprobleme der Prozessoren der 13./14. Generation für Motherboard- und BIOS-Systemhersteller verantwortlich. Jetzt hat auch Intel eine Lösung vorgeschlagen. Werfen wir einen Blick darauf. Es ist möglich, dass im BIOS der Mainboards der 600er- und 700er-Serie die Einstellungsmöglichkeiten bezüglich Spannung, Frequenz, Stromverbrauch und Stabilität der Core-Prozessoren der 13. und 14. Generation falsch eingestellt sind oder die Einstellwerte außerhalb des offiziellen Bereichs liegen Die von Intel empfohlenen Einstellungen führen zu bzw. erhöhen das Risiko eines instabilen Prozessorbetriebs (siehe Abbildung unten): [C

See all articles