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