Назад | Перейти на главную страницу

Почему так много звонков в gettimeofday?

Почему комбинация 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. Возможно, слишком много записей записывается в многочисленные файлы журнала, расположенные в разных папках.

  • Отключите обычных подозреваемых, таких как mod_log_debug или mod_status
  • Перезагрузить конфигурацию Apache
  • Strace