Почему комбинация PHP / Apache делает так много gettimeofday
системных вызовов? Даже если вы быстрые, каждый вызов - это вызов, который следует учитывать.
Просто быстро strace -c -p [apache2 process id]
, дает следующее:
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
Эти звонки по 20К волнуют меня. Кто-нибудь хочет пролить свет на это?
apache-2.2
php
Gekkie
источник
источник
Ответы:
Gettimeofday чаще всего вызывается Apache для регистрации записей в файлах отладки. Также некоторые модули используют gettimeofday. Так что не о чем беспокоиться.
РЕДАКТИРОВАТЬ: Я сделал некоторые копания исходного кода PHP и пришел к следующим результатам: Большинство связанных с временем функций PHP будет использовать системное время. Так как они используют системное время, gettimeofday будет вызываться много, поэтому, если вы хотите уменьшить вызовы, уменьшите ваши функции, связанные со временем.
Я должен отметить, что другие функции также выполняют gettimeofday-вызовы. Например, если вы используете php_session_start, это (иногда, в зависимости от нескольких параметров, таких как, например, новый сеанс, ...) вызовет php_combined_lcg, который, в свою очередь, вызовет lcg_seed, если начальное значение не установлено в получить псевдослучайное число. И lcg_seed сделает вызов gettimeofday. Имейте это в виду.
источник
xdebug
установили, это также может быть побочным продуктом.Я обнаружил, что включение php модуля xdebug заставляет strace сообщать о нескольких
gettimeofday
вызовах.источник
Каждый процесс, которому требуется временная метка, вызывает gettimeofday, поэтому трудно понять, нормально это или нет.
Например, это может быть модуль, который создает журнал, модуль, который проверяет время ... Фактически, в вашем случае, чтобы узнать, почему существует так много gettimeofday, отключите модули apache, которые могут быть ответственны за вызов gettimeofday. Возможно, слишком много записей в многочисленные файлы журналов, расположенные в разных папках.
источник