Home  >  Article  >  Backend Development  >  How to solve the problem of too many php cgi.exe

How to solve the problem of too many php cgi.exe

藏色散人
藏色散人Original
2020-10-12 10:04:322783browse

Solution to too many php cgi.exe: first check the system disk space; then install PHP in CGI mode or ISAPI mode; then modify the program; finally optimize the fastcgi configuration file parameters in the web server configuration .

How to solve the problem of too many php cgi.exe

Recommended: "PHP Video Tutorial"

The server has a large number of php-cgi.exe processes, resulting in Solution to 100% CPU usage

This problem is generally a program problem. For example, the program uses fastcgi mode to run PHP, and the StartProcesses set by the program are too large, such as 6 or even larger.

Solution reference:

1. Check the system disk space. Check whether there are too many temporary files in the system. The temporary files of the MySQL database are stored in c:/windows/temp by default, resulting in the accumulation of tens of thousands or even millions of small files, overwhelming the system disk.

del *.* Delete all files

2.PHP is a widely used dynamic scripting language, but there is no built-in support for the PHP language in IIS, so if you need to use PHP , you must install it yourself. PHP can be installed in CGI mode or ISAPI mode. Since ISAPI mode has higher performance, I recommend that you use ISAPI mode.

3. If you can modify the program, it is recommended to reduce the StartProcesses value in the program configuration file to 2 to see if it improves.

4. Check whether there are any problems with the server and attacks.

Optimize the fastcgi configuration file fcgiext.ini in Windows 2003 IIS6 to reduce the number of PHP-cgi.exe processes and the memory size

I heard that fastcgi is better than isapi, so I installed it on the server Now, the configuration environment is Windows 2003 IIS6 fastcgi (FCGI) PHP5.2.17. After observing for a long time, we found that PHP working in FastCGI mode will occupy more and more memory, and the number of visits to the php-cgi process will be slightly more. There are N more. In the same situation, it can be hundreds of MB more than when using isapi mode. My server has only 2G of memory and I can't afford to hurt it.

I searched online and found that many people are facing the same problem. A more formal explanation from the PHP official is: There is no memory leak in the php-cgi process. php-cgi will recycle all the memory used by the script at the end of each request, but it will not release it to the operating system, but will continue. Held for next PHP request. This is probably done to reduce memory fragmentation or to solve the uncontrollable time required to apply for memory from the system and then release it back to the operating system. However, if by chance a PHP request uses a large memory operation such as ftp or zlib, a large chunk of system memory will be continuously occupied by php-cgi and cannot be used.

The solution to this problem is to optimize the fastcgi configuration file parameters in the web server configuration.

In the C:\WINDOWS\system32\inetsrv\fcgiext.ini file you can set php-cgi process related parameters, such as:

[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

In the above configuration:

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

The following is the recommended value:

maxInstances=

Change this value to a smaller value

Recommendation

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

Modify again

InstanceMaxRequests=

Change this value to a smaller value

Suggestion

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

After modification, restart IIS.

instanceMaxRequests PHP_FCGI_MAX_REQUESTS These two parameters determine the maximum number of PHP requests accepted after a php-cgi process is created. The default configuration in lighttpd is 10000. In other words, this php-cgi process will terminate every time it accepts 10,000 PHP requests, release all memory, and be restarted by the management process. If you lower it, for example, to 100, the restart cycle of php-cgi will be greatly shortened, and the impact time of problems caused by accidental high memory operations will also be shortened.

maxInstances This parameter specifies the maximum number of instances that can be started, that is, the number of php-cgi.exe processes. If you lower it, for example, to 100, then there will be at most only the php-cgi.exe process in the task manager's process, and the total memory occupied by php-cgi.exe will be greatly reduced.

The server I am using now is a Windows 2003 operating system with 4G memory. A php-cgi.exe program takes up 7-25M of memory. I adjusted the maxInstances value to 300 to reduce the number of php-cgi.exe processes. The total number and memory usage have also been reduced, and the response speed is much faster than before. At least the amount of adjustment can be determined according to the number of visits to your site.

The above is the detailed content of How to solve the problem of too many php cgi.exe. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn