Por que tantas chamadas de horário de expediente?

11

Por que o combo PHP / Apache faz tantos gettimeofdaysyscalls? Mesmo sendo rápido, todas as chamadas são chamadas que devem ser contabilizadas.

Apenas uma rápida strace -c -p [apache2 process id], fornece o seguinte:

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

Aquelas chamadas de 20K me preocupam. Alguém quer lançar alguma luz sobre isso?

Gekkie
fonte
Java é ainda pior ...
Nils
O que seu programa está fazendo?
Michael Hampton
1
Não consigo responder o "porquê", mas você conhece o stackoverflow.com/questions/7266813/… e access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_MRG/… ? O syscall normalmente seria mapeado para o código de espaço do usuário ("vsyscall"), para que a sobrecarga fosse reduzida significativamente.
precisa
1
A contagem não deve te preocupar. A enquete tem apenas 200 chamadas, mas usa mais de 98% do tempo. Você pode alternar para a saída normal do strace e, em seguida, verá o que o apache está fazendo (o tornará mais lento).
ott--
3
Relacionado: blog.packagecloud.io/eng/2017/03/08/…
Michael Hampton

Respostas:

4

Gettimeofday é chamado principalmente pelo Apache para registrar entradas em arquivos de depuração. Alguns módulos também usam gettimeofday. Portanto, nada para se preocupar.

EDIT: Eu fiz uma digitação do código fonte php e obtive os seguintes resultados: A maioria das funções php relacionadas ao tempo usará a hora do sistema. Como eles usam a hora do sistema, gettimeofday será chamado muito; portanto, se você quiser reduzir as chamadas, reduza as funções relacionadas à hora.

Devo observar, no entanto, que outras funções também fazem chamadas para horário do dia. Por exemplo, se você usar php_session_start, isso (algumas vezes, dependendo de alguns parâmetros como se fosse uma nova sessão, ...) fará uma chamada para php_combined_lcg, que por sua vez fará uma chamada para lcg_seed se não houver um valor inicial definido como obtenha um número pseudo-aleatório. E o lcg_seed fará uma chamada para horário do dia. Mantenha isso em mente.

timmeyh
fonte
Mas e se meu script php CLI também faz um monte de chamadas gettimeofday? existe algo errado com o meu php? (faz data ie () ou mktime () usar essas funções se eu não fornecer um timestamp como um param?)
Gekkie
Procurou um pouco e editado a minha resposta
timmeyh
Obrigado ... Acho que só tenho que conviver com todas essas ligações. :)
Gekkie
Se você xdebuginstalou, também pode ser um subproduto.
B00MER
1

Eu descobri que ter o módulo php xdebug habilitado faz com que o strace relate várias gettimeofdaychamadas.

Shoan
fonte
1

Todo processo que requer um registro de data e hora chama gettimeofday, portanto, é difícil saber se é normal ou não.

Por exemplo, pode ser um módulo que cria um log, um módulo que verifica a hora ... Na verdade, no seu caso, para saber por que existem tantos gettimeofday, desative os módulos apache que podem ser responsáveis ​​por chamar gettimeofday. Talvez haja muitas gravações em vários arquivos de log localizados em pastas diferentes.

  • Desative os suspeitos comuns, como mod_log_debug ou mod_status
  • Recarregar configuração do Apache
  • traço
Nicolas Guérinet
fonte