Чому так багато дзвінків у gettimeofday?


11

Чому у комбінації 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

Ці 20K дзвінки хвилюють мене. Хтось турбується пролити щось на це?


Ява ще гірша ...
Нілс

Чим займається ваша програма?
Майкл Хемптон

1
Я не можу відповісти «чому» , але ви знаєте про stackoverflow.com/questions/7266813 / ... і access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_MRG / ... ? Системний виклик, як правило, відображатиметься до кодового простору користувача ("vsyscall"), тому накладні витрати будуть значно зменшені.
the wabbit

1
Граф не повинен вас хвилювати. Опитування має лише 200 дзвінків, але воно використовує понад 98% часу. Ви можете переключитися на звичайний висновок стрази, і тоді ви побачите, що робить apache (сповільнить його через багато часу).
ott--

Відповіді:


4

Gettimeofday в основному викликає Apache для введення записів у налагоджувальні файли. Також деякі модулі використовують gettimeofday. Тож нічого хвилюватися.

РЕДАКТУВАННЯ: Я викопав кілька копань вихідного коду PHP і придумав такі результати: Більшість функцій, пов’язаних із часом, використовують php, використовуючи системний час. Оскільки вони використовують системний час, gettimeofday буде називатися багато, тому, якщо ви хочете зменшити виклики, зменшіть свої функції, пов’язані з часом.

Я маю зауважити, хоча інші функції також здійснюють дзвінки gettimeofday. Наприклад, якщо ви використовуєте php_session_start, це (іноді, залежно від кількох параметрів, наприклад, якщо новий сеанс, ...) здійснить виклик до php_combined_lcg, який, у свою чергу, зробить виклик lcg_seed, якщо значення для насіння не встановлено отримати псевдо випадкове число. І lcg_seed здійснить дзвінок у gettimeofday. Майте це на увазі.


Але що робити, якщо мій PHP-скрипт CLI також робить багато дзвінків gettimeofday? щось не так з моїм php? (чи тобто дата () або mktime () використовують ці функції, якщо я не надаю часову
позначку

Трохи
обшукали

Дякую ... Я думаю, мені просто доводиться жити з усіма цими дзвінками. :)
Gekkie

Якщо ви xdebugвстановили, це також може бути її побічним продуктом.
B00MER

1

Я виявив, що включення модуля php, xdebug, увімкнено, спричиняє напруження в повідомленні про кілька gettimeofdayдзвінків.


1

Кожен процес, який вимагає позначки часу, називає gettimeofday, тому важко дізнатися, нормально це чи ні.

Наприклад, це може бути модуль, який створює журнал, модуль, який перевіряє час ... Насправді, у вашому випадку, щоб знати, чому так багато gettimeofday, відключіть модулі apache, які могли б відповідати за виклик gettimeofday. Можливо, занадто багато записує до численних файлів журналів, розташованих у різних папках.

  • Вимкніть звичайних підозрюваних, таких як mod_log_debug або mod_status
  • Перезавантажте конфігурацію Apache
  • стрижка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.