백엔드 개발 PHP 튜토리얼 PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系_PHP教程

PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系_PHP教程

Jul 21, 2016 pm 02:57 PM
100% cpu file get nginx php-cgi 그리고 관계 기능 ~의 달리다 프로세스

有时候,运行 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 请求。要是觉得麻烦,可以自行将以下代码封装成一个函数。
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() 导致的问题了。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/363903.htmlTechArticle有时候,运行 Nginx、PHP-CGI(php-fpm) Web服务的 Linux 服务器,突然系统负载上升,使用 top 命令查看,很多 php-cgi 进程 CPU 使用率接近100%。后来...
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

144코어, 3D 스택 SRAM: Fujitsu, 차세대 데이터 센터 프로세서 MONAKA 자세히 설명 144코어, 3D 스택 SRAM: Fujitsu, 차세대 데이터 센터 프로세서 MONAKA 자세히 설명 Jul 29, 2024 am 11:40 AM

28일 본 홈페이지 소식에 따르면 외신 테크레이더(TechRader)는 후지쯔가 2027년 출하 예정인 FUJITSU-MONAKA(이하 MONAKA) 프로세서를 자세하게 소개했다고 보도했다. MONAKACPU는 "클라우드 네이티브 3D 매니코어" 아키텍처를 기반으로 하며 Arm 명령어 세트를 채택합니다. 이는 데이터 센터, 엣지 및 통신 분야를 지향하며 메인프레임 수준의 RAS1을 구현할 수 있습니다. Fujitsu는 MONAKA가 에너지 효율성과 성능의 도약을 이룰 것이라고 밝혔습니다. 초저전압(ULV) 기술 등의 기술 덕분에 CPU는 2027년에 경쟁 제품보다 2배의 에너지 효율성을 달성할 수 있으며 냉각에는 수냉이 필요하지 않습니다. ; 게다가 프로세서의 애플리케이션 성능도 상대보다 두 배나 뛰어납니다. 지침 측면에서 MONAKA에는 벡터가 장착되어 있습니다.

누출로 Intel Arrow Lake-U, -H, -HX 및 -S의 주요 사양 공개 누출로 Intel Arrow Lake-U, -H, -HX 및 -S의 주요 사양 공개 Jun 15, 2024 pm 09:49 PM

Intel Arrow Lake는 Lunar Lake와 동일한 프로세서 아키텍처를 기반으로 할 것으로 예상됩니다. 즉, Intel의 새로운 LionCove 성능 코어가 경제적인 Skymont 효율성 코어와 결합될 것입니다. Lunar Lake는 Ava에서만 사용할 수 있습니다.

AM4는 죽기를 거부하고 AMD는 최대 4.8GHz 클럭의 Ryzen 9 5900XT/7 5800XT를 출시할 것이라고 뉴스에 나와 있습니다. AM4는 죽기를 거부하고 AMD는 최대 4.8GHz 클럭의 Ryzen 9 5900XT/7 5800XT를 출시할 것이라고 뉴스에 나와 있습니다. Jun 05, 2024 pm 09:43 PM

6월 1일 이 웹사이트의 뉴스에 따르면, @CodeCommando 소스는 오늘 Computex2024 이벤트에서 AMD의 다가오는 프레젠테이션 문서의 일부 스크린샷을 공유하면서 트윗의 내용은 "AM4는 결코 죽지 않을 것입니다"였으며 첨부된 사진에는 두 가지 새로운 내용이 나와 있었습니다. Ryzen5000XT 시리즈 프로세서. 스크린샷에 따르면 다음 두 가지 제품이 표시됩니다. Ryzen95900XTR Ryzen95900XT는 AMD의 Ryzen95950X보다 클럭 속도가 약간 낮은 새로운 16코어 AM4 프로세서입니다. Ryzen75800XT AMD의 기존 Ryzen75800X 프로세서보다 더 빠른 변형입니다. 두 프로세서 모두 최대 4.8G까지 클럭됩니다.

Excel 함수 수식의 전체 모음 Excel 함수 수식의 전체 모음 May 07, 2024 pm 12:04 PM

1. SUM 함수는 열이나 셀 그룹의 숫자를 합하는 데 사용됩니다(예: =SUM(A1:J10)). 2. AVERAGE 함수는 열이나 셀 그룹에 있는 숫자의 평균을 계산하는 데 사용됩니다(예: =AVERAGE(A1:A10)). 3. COUNT 함수, 열이나 셀 그룹의 숫자나 텍스트 수를 세는 데 사용됩니다. 예: =COUNT(A1:A10) 4. IF 함수, 지정된 조건을 기반으로 논리적 판단을 내리고 결과를 반환하는 데 사용됩니다. 해당 결과.

Intel CPU 크기 및 코어 스케줄링 문제, 12세대 이상의 CPU 크기 및 코어 최적화 설정 Intel CPU 크기 및 코어 스케줄링 문제, 12세대 이상의 CPU 크기 및 코어 최적화 설정 Jun 19, 2024 am 01:42 AM

Inteli5-12600 이상 CPU, i5-13400 이상 CPU에는 P-Core 성능 코어(대형 코어) 및 E-Core 에너지 효율 코어(소형 코어)가 있습니다. "큰 코어와 작은 코어"의 스케줄링 문제로 인해 일부 게임은 프레임이 떨어질 수 있습니다. 이전 CPU만큼 좋지는 않습니다. 실제로 시스템에서는 현재 상황에 대처하기 위해 더 어린 CPU가 처리할 수 있고 더 오래된 CPU를 파견할 필요가 없다고 생각합니다. 오래된 코어가 쉬고 있고 작동하지 않습니다. 아래 편집자가 이 문제를 해결하는 방법을 알려줄 것입니다. 바탕화면에 새 텍스트 문서를 생성하고, 다음 내용을 복사하여 1.reg로 저장한 후 마우스 오른쪽 버튼을 클릭하여 병합합니다. WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SY

Intel 13세대 및 14세대 프로세서 안정성 문제 해결 방법 Intel 13세대 및 14세대 프로세서 안정성 문제 해결 방법 Jun 18, 2024 pm 06:01 PM

13세대, 14세대 프로세서에서는 게임 충돌, 블루스크린, 컴퓨터 자동 재시작 등의 오류가 발생했는데, 앞서 엔비디아가 문의한 결과 인텔 프로세서의 문제로 의심됐다. 13/14세대 프로세서의 안정성 문제를 마더보드 및 BIOS 시스템 제조업체에 비난했습니다. 이제 인텔도 솔루션을 제안했습니다. 아래의 편집기를 살펴보겠습니다. 13세대 및 14세대 Core 프로세서의 전압, 주파수, 전력 소비 및 안정성과 관련된 600 및 700 시리즈 마더보드의 BIOS 설정 옵션이 잘못 설정되었거나 설정 값이 공식적으로 범위를 벗어났을 가능성이 있습니다. 이는 Intel에서 허용하는 것입니다. Intel에서 권장하는 설정은 다음과 같습니다(아래 그림 참조).

Intel Z890 마더보드에는 Thunderbolt 4가 기본 탑재될 것으로 예상되며 Arrow Lake-S 프로세서 코어 디스플레이에는 다양한 크기가 포함될 것으로 알려졌습니다. Intel Z890 마더보드에는 Thunderbolt 4가 기본 탑재될 것으로 예상되며 Arrow Lake-S 프로세서 코어 디스플레이에는 다양한 크기가 포함될 것으로 알려졌습니다. May 07, 2024 pm 05:10 PM

5월 7일 이 사이트의 소식에 따르면 블로거 Jinzhu Upgrade Package는 최근 Intel의 차세대 데스크탑 프로세서 ArrowLake-S 시리즈에 여러 버전의 코어 그래픽이 포함될 것이며 지원하는 Z890 마더보드에 Thunderbolt가 장착될 것으로 예상된다는 소식을 전했습니다. 4 인터페이스가 표준입니다. 최신 뉴스에 따르면 ArrowLake-S 시리즈 CPU는 GT1 사양 코어 디스플레이를 사용하고 최대 4개의 Xe 코어(예: 64EU)를 갖습니다. 그러나 Intel은 여전히 ​​저가형 제품에서 핵심 디스플레이 기술을 "과시"하여 Xe 코어가 3개 또는 2개만 있는 모델을 제외할 것입니다. 현재 출시된 Core Ultra5125H 프로세서에는 Meteor Lake-P 시리즈 제품보다 낮은 7개의 Xe 코어만 포함되어 있습니다.

Intel은 LGA9324 Oak Stream-AP 플랫폼이 Diamond Rapids Xeon 프로세서를 지원함을 확인했습니다. Intel은 LGA9324 Oak Stream-AP 플랫폼이 Diamond Rapids Xeon 프로세서를 지원함을 확인했습니다. Aug 22, 2024 am 11:16 AM

8월 22일 이 사이트의 소식에 따르면 X 플랫폼 사용자 포시포시(@harukaze5719)는 Intel이 공식 웹사이트 DESIGN-iNTOOLSstore에 LGA9324-OKS-AP 플랫폼 전원 공급 장치 테스트에 적합한 어댑터 보드 2개를 나열한 것을 발견했습니다. ▲BLU 버전 어댑터 보드, Intel은 RED 버전 외에도 LGA9324-OKS-APOakStream 플랫폼이 DiamondRapids를 지원한다고 이 두 제품 설명에 썼는데, 이는 Xeon 6 "GraniteRapids" 이후 차세대 Xeon 성능 코어의 존재를 긍정적으로 확인시켜 줍니다. 프로세서 및 해당 플랫폼. DiamondRapids 프로세서 및 OakStream 플랫폼에 대한 최신 정보

See all articles