>  기사  >  백엔드 개발  >  PHP cgi.exe가 너무 많은 문제를 해결하는 방법

PHP cgi.exe가 너무 많은 문제를 해결하는 방법

藏色散人
藏色散人원래의
2020-10-12 10:04:322764검색

너무 많은 php cgi.exe에 대한 해결책: 먼저 시스템 디스크 공간을 확인한 다음 CGI 모드 또는 ISAPI 모드에서 PHP를 설치하고 마지막으로 웹 서버 구성에서 fastcgi 구성 파일 매개변수를 최적화합니다.

PHP cgi.exe가 너무 많은 문제를 해결하는 방법

권장 사항: "PHP 비디오 튜토리얼"

서버에 php-cgi.exe 프로세스가 많아 CPU가 솔루션의 100%를 차지합니다.

이 문제는 일반적으로 PHP를 실행하기 위해 fastcgi 메소드를 사용하는 프로그램과 같은 프로그램 문제와 프로그램에서 설정한 StartProcesses가 6 이상으로 너무 큽니다.

해결 방법 참조:

1. 시스템 디스크 공간을 확인하세요. 시스템에 임시 파일이 너무 많은지 확인하십시오. MySQL 데이터베이스의 임시 파일은 기본적으로 c:/windows/temp에 저장되어 수만 또는 수백만 개의 작은 파일이 축적되어 시스템 디스크를 압도합니다. .

del *.* 모든 파일 삭제

2.PHP는 널리 사용되는 동적 스크립트 언어이지만 IIS에는 PHP 언어에 대한 기본 지원이 없으므로 PHP를 사용해야 하는 경우 직접 설치해야 합니다. . PHP는 CGI 모드나 ISAPI 모드로 설치할 수 있습니다. ISAPI 모드가 성능이 더 높으므로 ISAPI 모드를 사용하는 것이 좋습니다.

3. 프로그램을 수정할 수 있다면 프로그램 구성 파일의 StartProcesses 값을 2로 줄여서 개선되는지 확인하는 것이 좋습니다.

4. 서버 및 공격에 문제가 있는지 확인하세요.

Windows 2003+IIS6에서 fastcgi 구성 파일 fcgiext.ini를 최적화하여 PHP-cgi.exe 프로세스 수와 메모리 크기를 줄입니다.

fastcgi가 isapi보다 낫다고 해서 서버에 설치했습니다. 환경은 Windows 2003 +IIS6+fastcgi(FCGI)+PHP5.2.17입니다. 오랫동안 관찰한 결과 FastCGI 모드에서 작동하는 PHP가 점점 더 많은 메모리를 차지하며 방문 횟수도 약간 더 많아지는 것을 발견했습니다. php-cgi 프로세스 수는 N이 됩니다. 같은 상황에서는 isapi 모드를 사용할 때보다 수백 MB가 더 커질 수 있습니다. 내 서버의 메모리는 2G에 불과하므로 감당할 수 없습니다.

온라인에서 검색해보니 많은 사람들이 같은 문제에 직면하고 있는 것을 발견했습니다. PHP 관계자의 보다 공식적인 설명은 다음과 같습니다. php-cgi 프로세스에는 메모리 누수가 없습니다. php-cgi는 각 요청이 끝날 때 스크립트에서 사용하는 모든 메모리를 재활용하지만 운영 체제에 릴리스하지는 않습니다. 하지만 다음 PHP 요청을 위해 계속 유지됩니다. 이는 아마도 메모리 조각화를 줄이거나 시스템에서 메모리를 적용한 다음 운영 체제로 다시 릴리스하는 데 필요한 제어할 수 없는 시간을 해결하기 위해 수행될 것입니다. 그러나 우연히 PHP 요청이 ftp 또는 zlib와 같은 대규모 메모리 작업을 사용하는 경우 시스템 메모리의 큰 부분이 php-cgi에 의해 지속적으로 점유되어 사용할 수 없게 됩니다.

이 문제에 대한 해결책은 웹 서버 구성에서 fastcgi 구성 파일 매개변수를 최적화하는 것입니다.

C:WINDOWSsystem32inetsrvfcgiext.ini 파일에서 php-cgi 프로세스와 관련된 매개변수를 설정할 수 있습니다. 예:

[Types]
php = PHP
[PHP]
ExePath=C:\php-5.3.8-nts-Win32-VC9-x86\php-cgi.exe
maxInstances=100
InstanceMaxRequests=10000
EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000
RequestTimeout=600
ActivityTimeout=900

위 구성에서:

ExePath  指定了FastCGI解析程序的路径,
instanceMaxRequests  指定了每个实例可以处理的最大请求数,
maxInstances 指定可以启动的最大实例数目,
EnvironmentVars 创建了一个环境变量 PHP_FCGI_MAX_REQUESTS ,默认值设为10000,
requestTimeout  指定了请求的超时时间为600秒,
activityTimeout  指定了活动会话超时时间为900秒。

다음은 권장 값입니다.

maxInstances=

이 값을 변경하세요. 더 작은 값으로

제안

512M 内存的改maxInstances=50
1G 内存的改maxInstances=80
2G 内存的改maxInstances=140

수정

InstanceMaxRequests=

이 값을 더 작은 값으로 변경하세요

변경 후

512M 内存的改InstanceMaxRequests=200
1G 内存的改InstanceMaxRequests=300
2G 内存的改InstanceMaxRequests=500

IIS를 다시 시작하는 것이 좋습니다.

instanceMaxRequests PHP_FCGI_MAX_REQUESTS 이 두 매개변수는 php-cgi 프로세스가 생성된 후 허용되는 최대 PHP 요청 수를 결정합니다. lighttpd의 기본 구성은 10000입니다. 즉, 이 php-cgi 프로세스는 10,000개의 PHP 요청을 수락할 때마다 종료되고 모든 메모리를 해제한 다음 관리 프로세스에 의해 다시 시작됩니다. 예를 들어 100으로 낮추면 php-cgi의 재시작 주기가 크게 단축되고 실수로 높은 메모리 작업으로 인해 발생하는 문제의 영향 시간도 단축됩니다.

maxInstances 이 매개변수는 시작할 수 있는 최대 인스턴스 수, 즉 php-cgi.exe 프로세스 수를 지정합니다. 예를 들어 100으로 낮추면 작업 관리자 프로세스에는 기껏해야 php-cgi.exe 프로세스만 있고 php-cgi.exe가 차지하는 전체 메모리는 크게 줄어듭니다.

지금 사용하고 있는 서버는 4G 메모리를 탑재한 Windows 2003 운영체제입니다. php-cgi.exe 프로그램은 7~25M의 메모리를 차지합니다. maxInstances 값을 300으로 조정하여 php-cgi의 총 개수를 줄였습니다. exe 프로세스 및 점유 메모리도 줄어들었고, 응답 속도도 이전보다 훨씬 빨라졌습니다. 적어도 어느 정도 조정할 수 있는지는 사이트 방문 횟수에 따라 다릅니다.

위 내용은 PHP cgi.exe가 너무 많은 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.