Pourquoi tant d'appels gettimeofday?

11

Pourquoi le combo PHP / Apache fait-il autant d' gettimeofdayappels système? Même si vous êtes rapide, chaque appel est un appel qui doit être pris en compte.

Juste un rapide strace -c -p [apache2 process id], donne ce qui suit:

Process 22294 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 98.52    0.010000          51       196           poll
  1.48    0.000150           0     20752           gettimeofday
  0.00    0.000000           0        94         7 read
  0.00    0.000000           0        48           write
  0.00    0.000000           0        96        32 open
  0.00    0.000000           0        75           close
  0.00    0.000000           0         6           chdir
  0.00    0.000000           0       766           time
  0.00    0.000000           0         2           chmod
  0.00    0.000000           0        56        10 access

Ces 20 000 appels m'inquiètent. Quelqu'un veut-il faire la lumière là-dessus?

Gekkie
la source
Java est encore pire ...
Nils
Que fait votre programme?
Michael Hampton
1
Je ne peux pas répondre au "pourquoi", mais connaissez-vous stackoverflow.com/questions/7266813/… et access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_MRG/… ? L'appel système sera typiquement mappé au code de l'espace utilisateur ("vsyscall") de sorte que la surcharge serait considérablement réduite.
the-wabbit
1
Le décompte ne devrait pas vous inquiéter. Le sondage n'a que 200 appels, mais il utilise plus de 98% du temps. Vous pouvez passer à la sortie de strace normale, puis vous verrez ce que fait Apache (le ralentira beaucoup).
ott--
3
Connexe: blog.packagecloud.io/eng/2017/03/08/…
Michael Hampton

Réponses:

4

Gettimeofday est principalement appelé par Apache pour enregistrer les entrées dans les fichiers de débogage. Certains modules utilisent également gettimeofday. Donc, rien à craindre.

EDIT: J'ai fait quelques recherches de code source php et est arrivé aux résultats suivants: La plupart des fonctions php liées au temps utiliseront l'heure du système. Puisqu'ils utilisent l'heure système, gettimeofday sera appelé beaucoup, donc si vous voulez réduire les appels, réduisez vos fonctions liées au temps.

Je dois cependant remarquer que d'autres fonctions font également des appels gettimeofday. Par exemple, si vous utilisez php_session_start, cela va (parfois, en fonction de quelques paramètres comme si une nouvelle session, ...) appeler Php_combined_lcg qui fera à son tour un appel à lcg_seed s'il n'y a pas de valeur de départ définie sur obtenir un nombre pseudo aléatoire. Et lcg_seed fera un appel gettimeofday. Garde ça en tête.

timmeyh
la source
Mais que se passe-t-il si mon script PHP CLI fait aussi beaucoup d'appels gettimeofday? y a-t-il un problème avec mon php? (Est-ce que date () ou mktime () utilise-t-il ces fonctions si je ne fournis pas d'horodatage comme
paramètre
J'ai cherché un peu et modifié ma réponse
timmeyh
Merci ... Je suppose que je dois juste vivre avec tous ces appels. :)
Gekkie
Si vous l'avez xdebuginstallé, il peut également en être un sous-produit.
B00MER
1

J'ai découvert que l'activation du module php, xdebug, obligeait strace à signaler plusieurs gettimeofdayappels.

Shoan
la source
1

Tout processus nécessitant un horodatage appelle gettimeofday, il est donc difficile de savoir s'il est normal ou non.

Par exemple, ça peut être un module qui crée un journal, un module qui vérifie l'heure ... En fait, dans votre cas, pour savoir pourquoi il y a tant de gettimeofday, désactivez les modules apache qui pourraient être chargés d'appeler gettimeofday. Il y a peut-être trop d'écritures dans de nombreux fichiers journaux situés dans différents dossiers.

  • Désactivez les suspects habituels comme mod_log_debug ou mod_status
  • Recharger la configuration d'Apache
  • strace
Nicolas Guérinet
la source