Utilisation processeur Apache/php

Utilisation processeur Apache/php - PHP - Programmation

Marsh Posté le 17-09-2011 à 14:21:42    

Bonjour,
en observant de plus près les logs de mon serveur ..  
Lorsque mon script de sauvegarde de ma db (php) tourne, ainsi que certains traitements lourds d'entretien .. ce dernier monopolise tout le processeur, parfois sur 40, voir 50 sec ..
 
Le fait accomplit, lorsque le serveur reçoit d'autres connexions (lorsque ce script tourne),  
de nombreuses lignes de logs de visiteurs normaux aboutissent à une erreur 500
( timeout > 30 sec d'éxecution php ), en cascade ..
 
Y'à t-il un moyen de limiter l'usage du processeur par processus php, genre 50%,  
ou de déclarer cela via un "ini_set", afin de limiter ces congestions soudaines ?
 
Merci  :jap:

Message cité 1 fois
Message édité par grosbin le 17-09-2011 à 14:31:36

---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 17-09-2011 à 14:21:42   

Reply

Marsh Posté le 17-09-2011 à 18:13:13    

Question peut-être bête, mais pourquoi ne pas laisser le proc à 100% ? tu as d'autres services sur ton serveur ?

Reply

Marsh Posté le 17-09-2011 à 19:11:25    

pour permettre aux visiteurs sur d'autres page d'accèder aux sites au lieu d'être bloqués ..


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 18-09-2011 à 11:29:24    

Sous Windows tu peux toujours utiliser cet utilitaire http://bitsum.com/prolasso.php  
 
Sous Linux il y a ça: http://www.howtoforge.com/how-to-l [...] ian-ubuntu


---------------
₪₪₪ Waze, GPS gratuit pour Androïd et iPhone ₪₪₪
Reply

Marsh Posté le 19-09-2011 à 14:23:31    

1) Assure-toi que tu n'es pas en mode php-cgi (ce mode est très consommateur de ressources)
 
2) Fait de temps à autre des sleep ou des usleep (Voir la doc PHP)
 
3) Choppe la consommation CPU si t'es sous Unix :
 

Code :
  1. <?php
  2.  
  3. function getCpuUsage() {
  4.  $out      = shell_exec('ps aux|awk \'NR > 0 { s +=$3 }; END {print s}\'');
  5.  $cpuUsage = strtr(trim($out), array("\n"=>'', "\r"=>''));
  6.  return $cpuUsage;
  7. }
  8.  
  9. while (getCpuUsage() > 50) {
  10.  sleep(1);
  11. }
  12.  
  13. ?>


Message édité par CyberDenix le 19-09-2011 à 14:28:36

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 19-09-2011 à 14:53:00    

pas bête, mais si par exemple, le script appelle du shell, qui met 50 sec à s'executer ..  
le process ne pourra pas sleeper tant que le retour du shell n'est pas complet ??


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 19-09-2011 à 15:13:01    

Je te rassure, un ps aux, c'est très rapide. Mais tu peux aussi l’exécuter en background avec un &, si tu veux :)


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 19-09-2011 à 15:30:28    

Mhhh ce serait sympa que tu m'indiques la démarche du "&" merci bcp pour ta réponse :)


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 19-09-2011 à 17:50:13    

A la fin de la ligne de commande tu ajoutes :
 
 > /dev/null 2>/dev/null &
 
Ce qui a pour effer de lancer la commande en background, en redirigeant les sorties 1 (standard) et 2 (erreur) vers /dev/null (poubelle).
 
C'est à mon avis inutile dans ton cas, pour récupérer un ps aux !
Autant faire le sleep() tout seul dans ce cas :sweat:  
 
Par contre, pour lancer un programme en arrière plan et/ou faire du multithreading, c'est d'la bombe atomique [XP perso inside] :)


Message édité par CyberDenix le 19-09-2011 à 17:52:41

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 20-09-2011 à 10:34:54    

grosbin a écrit :

Bonjour,
en observant de plus près les logs de mon serveur ..  
Lorsque mon script de sauvegarde de ma db (php) tourne, ainsi que certains traitements lourds d'entretien .. ce dernier monopolise tout le processeur, parfois sur 40, voir 50 sec ..
 
Le fait accomplit, lorsque le serveur reçoit d'autres connexions (lorsque ce script tourne),  
de nombreuses lignes de logs de visiteurs normaux aboutissent à une erreur 500
( timeout > 30 sec d'éxecution php ), en cascade ..
 
Y'à t-il un moyen de limiter l'usage du processeur par processus php, genre 50%,  
ou de déclarer cela via un "ini_set", afin de limiter ces congestions soudaines ?
 
Merci  :jap:


D'un côté on ne fait pas de traitement de maintenance sur une base de prod. n'importe quand.
Programme la nuit le via crontab ou autre et puis voilà... :spamafote:
 
D'autant que vu qu'il n'y a aucune raison qu'une instance PHP ralentisse drastiquement une autre instance PHP, je suppose que le timeout est du à la BDD qui doit être +/- à la ramasse et/ou lockée à cause des traitements de maintenance.


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 20-09-2011 à 10:34:54   

Reply

Marsh Posté le 20-09-2011 à 11:18:28    

c'est exact je l'ai programmé pour 3h du mat, à usage minimum.
Le lockage se fait car attente de résultats d'une commande de shell (30sec)
et lockage bdd sur 15 sec environ pour le backup


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 20-09-2011 à 12:35:10    

Aaaaahhh, d'accord !  
 
Si c'est réellement la commande shell qui bloque (et non la BDD), alors effectivement lancer cette commande en arrière plan pourra t'aider !
 

Code :
  1. ma_commande > /dev/null 2>/dev/null &


 

Code :
  1. <?php
  2.  
  3. // Background process :
  4. // We do not wait the command execution to return
  5. shell_exec('ma_commande > /dev/null 2>/dev/null &');
  6.  
  7. ?>


---------------
Directeur Technique (CTO)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed