Le process Apache consum trop de CPU

J'ai un server ubuntu apache / php exécutant php utilisant appx 100 hits / sec et un PHP cron en cours d'exécution.

Je reçois occasionnellement une charge CPU élevée sur l'un des process Apache qui rest élevé indépendamment de la circulation ou de l'activité cron. Il me semble qu'il est coincé dans une sorte de boucle ou quelque chose.

Ci-dessous, vous findez l'info top et strace.

Comment puis-je find où est le mauvais code et ce qui cause cela?

top - 14:45:24 up 3 days, 3:38, 1 user, load average: 5.10, 5.88, 5.85 Tasks: 163 total, 5 running, 158 sleeping, 0 stopped, 0 zombie Cpu(s): 47.8%us, 18.5%sy, 0.0%ni, 10.2%id, 0.0%wa, 0.0%hi, 1.8%si, 21.6%st Mem: 7885012k total, 3858484k used, 4026528k free, 177444k buffers Swap: 0k total, 0k used, 0k free, 1037868k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 10736 www-data 20 0 769m 559m 478m R 69 7.3 29:08.30 apache2 10844 www-data 20 0 824m 601m 492m S 17 7.8 4:37.90 apache2 1016 root 20 0 242m 25m 4628 S 6 0.3 162:07.93 scalarizr 9030 www-data 20 0 879m 619m 492m S 4 8.0 5:06.82 apache2 20216 www-data 20 0 747m 228m 170m S 4 3.0 0:01.94 apache2 10807 www-data 20 0 814m 584m 492m S 3 7.6 4:54.10 apache2 10455 www-data 20 0 831m 574m 492m S 3 7.5 4:32.65 apache2 10495 www-data 20 0 849m 592m 492m S 3 7.7 4:41.10 apache2 10884 www-data 20 0 840m 581m 492m S 3 7.6 4:25.06 apache2 ^CProcess 10736 detached % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 74.55 0.148052 1 109755 gettimeofday 25.36 0.050370 0 164634 clock_gettime 0.09 0.000178 0 54878 poll ------ ----------- ----------- --------- --------- ---------------- 100.00 0.198600 329267 total root@ec2-67-202-54-36:~# ^C 

4 Solutions collect form web for “Le process Apache consum trop de CPU”

Je recommand d'activer Mod_status Apache et d'allumer ExtendedStatus. Slicehost a un excellent article sur la façon d'accomplir ceci (j'utiliserais le package "elinks" contre "lynx" mais c'est une preference personnelle). Lorsque vous affichez l'URL d'état du server Apache, il y aura des colonnes PID, VHost et Request – elles devraient parcourir un long path vers l'identification de l'URI appelée que vous pouvez utiliser pour retracer le code spécifique en cours d'exécution .

Voici une version personnalisée de l'article Slicehost pour activer mod_status:

 sudo apt-get install elinks sudo /usr/sbin/a2enmod status sudo sh -c "echo 'ExtendedStatus On' > /etc/apache2/conf.d/extendedstatus" sudo vi /etc/apache2/sites-available/server-status <Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from localhost </Location> sudo /usr/sbin/a2ensite server-status sudo apachectl configtest sudo service apache2 reload 

Ensuite, pour afficher l'état du server:

 elinks -dump -dump-width 256 http://localhost/server-status 

Holy Mahoney! Votre Apache semble consumr beaucoup de memory. Qu'est-ce que ça fait courir? Y-a-t-il des tonnes de modules Apache chargés? Avez-vous des règles mod_security avec des règles qui ne sont pas compatibles avec la memory? Votre site fonctionne-t-il comme un magenta? En outre, quelque chose rend vraiment votre script PHP vraiment curieux de l'heure actuelle. :RÉ

Bien de toute façon, pour le profil PHP, vous pouvez utiliser XDebug et parsingr les résultats, par exemple KCacheGrind qui vous montre les résultats sous forme graphique facile à lire.

Pour l'parsing de performance en time réel, les distros Linux modernes ont la command perf , c'est comme le top traditionnel, mais vous pouvez parsingr des process simples et, si vous le souhaitez, vous pouvez voir au niveau de l'assemblage ce qui se passe.

Vous devez utiliser un débogueur par exemple xdebug , pour parcourir votre programme pour find la boucle infinie.

Il existe plusieurs options que vous pouvez utiliser pour isoler votre problème.

De toute évidence, vous souhaitez vérifier vos journaux et identifier s'il existe des problèmes qui sont signalés.

 /var/log/access_log /var/log/php_error /var/log/error_log 

En appuyant sur C alors que le haut est en cours, vous fournira des données supplémentaires sur les process qui fonctionnent avec un tel processeur

Comme dialtOne a mentionné, vous pouvez installer mod_status pour get des détails supplémentaires aussi.

Je ne suis pas sûr de savoir comment utiliser php, mais l'installation de memcache et APC sur les machines fournira des économies de ressources supplémentaires. Avec memcache, vous devrez configurer votre code pour searchr des caches pour les searchs de database en premier. Cela permet d'économiser beaucoup de frais généraux sur les sites fortement consultés avec de nombreuses searchs de database récurrentes.

L'ajustement de votre memory sur php et tout ce que votre database utilise peut également aider à contrôler les charges.

C'est dans votre php.ini et quel que soit votre file de configuration de database.

Si vous utilisez des appels de database, vous pouvez searchr des requêtes lentes.

D'autres options élargissent vos process enfants et le nombre de process par enfant, ce qui peut être configuré dans httpd.conf.

Un chargement de 5 n'est pas le pire selon le nombre de processeurs que vous avez. Certains de nos servers Web plus grands ont déjà vu des charges très élevées et le site est toujours bien livré. C'est vraiment la quantité d'énergie que vous souhaitez consacrer à peaufiner le site.

Bonne chance!

  • Comment puis-je exécuter strace ou ltrace sur Tomcat Catalina?
  • MySQL se bloque si la connection provient de l'extérieur du LAN
  • Surveiller les appels du système CPU / système sous Linux
  • Suivre un anon_inode insaisissable et lent de lsof et Apache strace
  • Déboguer irssi en utilisant 100% de processeur
  • Strace sondage, essayant de diagnostiquer le goulet d'étranglement
  • Comment simplifieriez-vous cette command?
  • "Yum clean" se bloque - quoi essayer ensuite?
  • nscd fonctionne lorsque strace est attaché au process
  • Le process Java (OpenDS) consum tout le processeur (futex flood) - comment débuger futex?
  • queue -f ne suit pas le file journal dans le conteneur Docker
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.