Maison > Article > développement back-end > Comment résoudre le problème du trop grand nombre de php cgi.exe
Solution au trop grand nombre de php cgi.exe : vérifiez d'abord l'espace disque du système ; puis installez PHP en mode CGI ou en mode ISAPI ; puis modifiez enfin le programme dans la configuration du serveur web ;
Recommandé : "Tutoriel vidéo PHP"
Le serveur dispose d'un grand nombre de php-cgi Processus .exe, entraînant une solution à une utilisation du processeur à 100 %
Ce problème est généralement un problème de programme. Par exemple, le programme utilise le mode fastcgi pour exécuter PHP, et les StartProcesses définis par le programme le sont également. grand, comme 6 ou même plus.
Référence de la solution :
1. Vérifiez l'espace disque du système. Vérifiez s'il y a trop de fichiers temporaires dans le système. Les fichiers temporaires de la base de données MySQL sont stockés par défaut dans c:/windows/temp, ce qui entraîne l'accumulation de dizaines de milliers, voire de millions de petits fichiers, surchargeant le disque système. .
del *.* Supprimer tous les fichiers
2.PHP est un langage de script dynamique largement utilisé, mais il n'y a pas de support intégré pour le langage PHP dans IIS, donc si vous en avez besoin utilisez PHP, vous devez l'installer vous-même. PHP peut être installé en mode CGI ou en mode ISAPI. Le mode ISAPI étant plus performant, je vous recommande d'utiliser le mode ISAPI.
3. Si vous pouvez modifier le programme, il est recommandé de réduire la valeur StartProcesses dans le fichier de configuration du programme à 2 pour voir si cela s'améliore.
4. Vérifiez s'il y a un problème avec le serveur.
Optimisez le fichier de configuration fastcgi fcgiext.ini dans Windows 2003+IIS6 pour réduire le nombre de processus PHP-cgi.exe et la taille de la mémoire
J'ai entendu dire que fastcgi est meilleur que isapi, donc Je l'ai installé sur le serveur Up, l'environnement de configuration est windows 2003+IIS6+fastcgi(FCGI)+PHP5.2.17. Après une longue période d'observation, on constate que PHP fonctionnant en mode FastCGI occupera de plus en plus de mémoire, et le nombre de visites sera légèrement supérieur. Il y a N processus php-cgi supplémentaires Dans les mêmes circonstances, il peut être de plusieurs centaines de Mo plus grand que lors de l'utilisation du mode isapi. La mémoire de mon serveur n'est que de 2 Go et je ne peux pas me le permettre.
J'ai cherché en ligne et j'ai découvert que de nombreuses personnes sont confrontées au même problème. Une explication plus formelle des responsables de PHP est la suivante : il n'y a pas de fuite de mémoire dans le processus php-cgi. php-cgi recyclera toute la mémoire utilisée par le script à la fin de chaque requête, mais ne la restituera pas au système d'exploitation. , mais continuera pour la prochaine requête PHP. Ceci est probablement fait pour réduire la fragmentation de la mémoire ou pour résoudre le temps incontrôlable requis pour demander de la mémoire au système, puis la restituer au système d'exploitation. Cependant, si par hasard une requête PHP utilise des opérations de mémoire volumineuses telles que ftp ou zlib, une grande partie de la mémoire système sera continuellement occupée par php-cgi et ne pourra pas être utilisée.
La solution à ce problème consiste à optimiser les paramètres du fichier de configuration fastcgi dans la configuration du serveur Web.
Dans le fichier C:WINDOWSsystem32inetsrvfcgiext.ini, vous pouvez définir les paramètres liés au processus php-cgi, tels que :
[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
Dans la configuration ci-dessus :
ExePath 指定了FastCGI解析程序的路径, instanceMaxRequests 指定了每个实例可以处理的最大请求数, maxInstances 指定可以启动的最大实例数目, EnvironmentVars 创建了一个环境变量 PHP_FCGI_MAX_REQUESTS ,默认值设为10000, requestTimeout 指定了请求的超时时间为600秒, activityTimeout 指定了活动会话超时时间为900秒。
Voici les valeurs recommandées :
maxInstances=
Changez cette valeur par une valeur plus petite
Suggestion
512M 内存的改maxInstances=50 1G 内存的改maxInstances=80 2G 内存的改maxInstances=140
Modifiez-la à nouveau
InstanceMaxRequests=
Changez cette valeur par a valeur plus petite
Suggestion
512M 内存的改InstanceMaxRequests=200 1G 内存的改InstanceMaxRequests=300 2G 内存的改InstanceMaxRequests=500
Après modification, redémarrez IIS.
instanceMaxRequests PHP_FCGI_MAX_REQUESTS Ces deux paramètres déterminent le nombre maximum de requêtes PHP acceptées après la création d'un processus php-cgi. La configuration par défaut dans lighttpd est de 10000. En d'autres termes, ce processus php-cgi se terminera à chaque fois qu'il acceptera 10 000 requêtes PHP, libérera toute la mémoire et sera redémarré par le processus de gestion. Si vous le réduisez, par exemple, à 100, le cycle de redémarrage de php-cgi sera considérablement raccourci, et le temps d'impact des problèmes causés par des opérations accidentelles de mémoire élevée sera également raccourci.
maxInstances Ce paramètre spécifie le nombre maximum d'instances pouvant être démarrées, c'est-à-dire le nombre de processus php-cgi.exe. Si vous le baissez, par exemple, à 100, alors il n'y aura au plus que le processus php-cgi.exe dans le processus du gestionnaire de tâches, et la mémoire totale occupée par php-cgi.exe sera considérablement réduite.
Le serveur que j'utilise actuellement est un système d'exploitation Windows 2003 avec 4 Go de mémoire. Un programme php-cgi.exe occupe 7 à 25 Mo de mémoire. J'ai ajusté la valeur maxInstances à 300 pour réduire le nombre de php-. processus cgi.exe. Le nombre total et l'utilisation de la mémoire ont également été réduits, et la vitesse de réponse est beaucoup plus rapide qu'avant. Au moins, le montant de l'ajustement peut être déterminé en fonction du nombre de visites sur votre site.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!