¿Por qué tantas llamadas de gettimeofday?


11

¿Por qué el combo PHP / Apache hace tantas gettimeofdayllamadas al sistema? Aunque son rápidas, cada llamada es una llamada que debe tenerse en cuenta.

Solo un rápido strace -c -p [apache2 process id], da lo siguiente:

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

Esas 20K llamadas me preocupan. ¿Alguien quiere arrojar algo de luz sobre esto?


Java es aún peor ...
Nils

¿Qué está haciendo tu programa?
Michael Hampton

1
No puedo responder el "por qué", pero ¿conoces stackoverflow.com/questions/7266813/… y access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_MRG/… ? La syscall normalmente se mapearía al código de espacio del usuario ("vsyscall") para que la sobrecarga se redujera significativamente.
the-wabbit

1
El conde no debería preocuparte. La encuesta solo tiene 200 llamadas, pero usa más del 98% del tiempo. Puede cambiar a la salida de strace normal, luego verá lo que está haciendo apache (lo ralentizará mucho).
ott--

Respuestas:


4

Apache llama principalmente a Gettimeofday para registrar entradas en archivos de depuración. También algunos módulos usan gettimeofday. Así que no hay nada por lo que preocuparse.

EDITAR: Realicé algunas excavaciones del código fuente de php y obtuve los siguientes resultados: la mayoría de las funciones de php relacionadas con el tiempo usarán la hora del sistema. Como usan la hora del sistema, se llamará mucho a gettimeofday, por lo que si desea reducir las llamadas, reduzca sus funciones relacionadas con el tiempo.

Sin embargo, debo comentar que otras funciones también hacen llamadas gettimeofday. Por ejemplo, si usa php_session_start, esto (a veces, dependiendo de algunos parámetros como si fuera una nueva sesión, ...) realizará una llamada a php_combined_lcg, que a su vez hará una llamada a lcg_seed si no hay un valor de inicialización establecido en obtener un número pseudoaleatorio. Y lcg_seed hará una llamada a gettimeofday. Mantén esto en mente.


Pero, ¿qué pasa si mi script PHP CLI también hace muchas llamadas gettimeofday? ¿hay algo mal con mi php? (¿ie date () o mktime () usan esas funciones si no proporciono una marca de tiempo como
parámetro

Busqué un poco y
edité

Gracias ... supongo que solo tengo que vivir con todas esas llamadas. :)
Gekkie

Si lo ha xdebuginstalado, también puede ser un subproducto.
B00MER

1

He descubierto que tener el módulo php, xdebug, habilitado hace que strace informe varias gettimeofdayllamadas.


1

Cada proceso que requiere una marca de tiempo llama a gettimeofday, por lo que es difícil saber si es normal o no.

Por ejemplo, puede ser un módulo que cree un registro, un módulo que verifique la hora ... De hecho, en su caso, para saber por qué hay tantos gettimeofday, desactive los módulos de apache que podrían ser responsables de llamar a gettimeofday. Quizás haya demasiadas escrituras en numerosos archivos de registro ubicados en diferentes carpetas.

  • Deshabilite los sospechosos habituales como mod_log_debug o mod_status
  • Recargar la configuración de Apache
  • strace
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.