¿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?

Gekkie
fuente
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--
3
Relacionado: blog.packagecloud.io/eng/2017/03/08/…
Michael Hampton

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.

timmeyh
fuente
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.

Shoan
fuente
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
Nicolas Guérinet
fuente