2010-03-25 23 views
2

Salut les gars J'ai une question bizarre,usleep() php5 utilise 40% de CPU ralenti

J'ai un script php cli fonctionne sur 5.x Centos qui utilise usleep (somtimes 1sec, parfois 2sec, Somtimes 100ms il dépend) s'il y a une certaine attente nécessaire, mais ce que j'ai remarqué qu'une fois sur son usleep() il semble utiliser environ 40% de la CPU au ralenti:

Cpu(s): 5.3%us, 21.3%sy, 0.0%ni, 57.2%id, 0.0%wa, 0.0%hi, 0.0%si, 16.1%st 

des idées?
acclamations

+0

La plupart du temps est passé en mode noyau, essayez strace sur le processus pour voir ce que syscalls appelle-t-il. – jpalecek

Répondre

4

Cela ne se produit pas pour moi avec un testcase très simple. Essayez ce qui suit sur votre système pour voir si vous avez encore le temps processeur excessif.

Script test.php:

<?php 
for ($n=0;$n<1000;$n++) 
{ 
    usleep(10); 
} 
?> 

Puis, à la course en ligne de commande: time php test.php

Mes résultats sont les suivants:

[[email protected] ~]$ cat /etc/redhat-release 
CentOS release 5.2 (Final) 
[[email protected] ~]$ time php test.php 

real 0m1.020s 
user 0m0.013s 
sys  0m0.006s 

Vous pouvez voir que l'utilisateur et le temps sys sont très très petites par rapport au temps réel (ou écoulé). c'est-à-dire que l'utilisation du processeur était très faible.

+0

ici vous allez mes temps = réel: 0m4.941s, utilisateur: 0m0.036s, sys: 0m0.036s. mais comment celui-ci est-il realeted à l'utilisation du CPU de toute façon? – Marcin

+1

D'après vos résultats, je conclus que 'usleep' n'est pas votre problème. Pouvez-vous nous montrer ce qu'il y a d'autre dans votre code autour du sommeil? Je présume que vous êtes dans une sorte de boucle. –

3

Sous Windows, si vous ne définissez pas la limite de temps de l'exécution de votre script à 0 (set_time_limit(0);), l'exécutable php mangeront jusqu'à 50% de la puissance du processeur lors de l'utilisation des fonctions du sommeil ou usleep.

+1

OMG, pourquoi est-ce? – jpalecek

+0

J'ai essayé ça, pas de différence ... acclamations P.S. je suis sur Linux Centos 5 .. – Marcin