Perché così tante chiamate gettimeofday?


11

Perché la combinazione PHP / Apache fa così tante gettimeofdaysyscall? Anche se sono veloci, ogni chiamata è una chiamata che dovrebbe essere presa in considerazione.

Solo una rapida strace -c -p [apache2 process id], dà il seguente:

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

Quelle chiamate da 20K mi preoccupano. Qualcuno ha intenzione di far luce su questo?


Java è anche peggio ...
Nils

Cosa sta facendo il tuo programma?
Michael Hampton

1
Non posso rispondere al "perché", ma siete consapevoli di stackoverflow.com/questions/7266813/... e access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_MRG/... ? In genere la syscall verrebbe mappata al codice dello spazio utente ("vsyscall") in modo da ridurre significativamente le spese generali.
the-wabbit

1
Il conteggio non dovrebbe preoccuparti. Il sondaggio ha solo 200 chiamate, ma utilizza oltre il 98% delle volte. Puoi passare al normale output di strace, quindi vedrai cosa sta facendo apache (rallenterà molto).
ott--

Risposte:


4

Gettimeofday viene principalmente chiamato da Apache per registrare le voci nei file di debug. Inoltre alcuni moduli usano gettimeofday. Quindi niente di cui preoccuparsi.

EDIT: Ho fatto un po 'di scavo di codice sorgente php e ho avuto i seguenti risultati: La maggior parte delle funzioni php legate al tempo useranno l'ora del sistema. Dal momento che usano l'ora di sistema, gettimeofday sarà chiamato molto, quindi se vuoi ridurre le chiamate, riduci le tue funzioni legate al tempo.

Devo sottolineare, tuttavia, che anche altre funzioni effettuano chiamate gettimeofday. Ad esempio, se usi php_session_start, questo (a volte dipende da alcuni parametri come se fosse una nuova sessione, ...) effettuerà una chiamata a php_combined_lcg che a sua volta farà una chiamata a lcg_seed se non c'è un valore seed impostato su ottenere un numero pseudo casuale. E lcg_seed effettuerà una chiamata gettimeofday. Tienilo a mente.


Ma cosa succede se il mio script php CLI fa anche molte chiamate gettimeofday? c'è qualcosa che non va nel mio php? (vale a dire date () o mktime () utilizzare queste funzioni se non fornisco un timestamp come parametro?)
Gekkie

Ho cercato un po 'e modificato la mia risposta
timmeyh,

Grazie ... Immagino che devo solo convivere con tutte quelle chiamate. :)
Gekkie,

Se hai xdebuginstallato, può anche essere un sottoprodotto di esso.
B00MER,

1

Ho scoperto che avere il modulo php, xdebug, abilitato fa sì che strace riporti diverse gettimeofdaychiamate.


1

Ogni processo che richiede un timestamp chiama gettimeofday, quindi è difficile sapere se è normale o meno.

Ad esempio, può essere un modulo che crea un registro, un modulo che controlla l'ora ... In effetti, nel tuo caso, per sapere perché ci sono così tanti gettimeofday, disabilita i moduli apache che potrebbero essere responsabili della chiamata gettimeofday. Forse ci sono troppe scritture in numerosi file di registro situati in cartelle diverse.

  • Disabilita i soliti sospetti come mod_log_debug o mod_status
  • Ricarica la configurazione di Apache
  • strace
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.