Dlaczego kombinacja PHP / Apache wykonuje tak wiele gettimeofday
wywołań systemowych? Mimo że są szybkie, każde połączenie jest połączeniem, które należy uwzględnić.
Po prostu strace -c -p [apache2 process id]
daje:
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
Martwią mnie te połączenia za 20 tys. Czy ktoś chce rzucić na to trochę światła?
apache-2.2
php
Gekkie
źródło
źródło
Odpowiedzi:
Gettimeofday jest najczęściej wywoływany przez Apache w celu rejestrowania wpisów w plikach debugowania. Również niektóre moduły używają gettimeofday. Więc nie ma się czym martwić.
EDYCJA: Wykonałem kopanie kodu źródłowego php i uzyskałem następujące wyniki: Większość funkcji php związanych z czasem będzie wykorzystywać czas systemowy. Ponieważ używają czasu systemowego, gettimeofday będzie często nazywany, więc jeśli chcesz ograniczyć połączenia, ogranicz funkcje związane z czasem.
Muszę jednak zauważyć, że inne funkcje również wykonują połączenia gettimeofday. Na przykład, jeśli użyjesz php_session_start, spowoduje to (czasami, w zależności od kilku parametrów, takich jak nowa sesja, ...) wywołanie php_combined_lcg, które z kolei wywoła wywołanie do lcg_seed, jeśli nie ma wartości początkowej ustawionej na uzyskać pseudolosową liczbę. I lcg_seed wykona połączenie gettimeofday. Pamiętaj o tym.
źródło
xdebug
zainstalowany, może to być również jego produkt uboczny.Odkryłem, że włączenie modułu php, xdebug, powoduje, że strace zgłasza kilka
gettimeofday
wywołań.źródło
Każdy proces, który wymaga znacznika czasu, wywołuje gettimeofday, więc trudno jest ustalić, czy jest to normalne, czy nie.
Na przykład może to być moduł, który tworzy dziennik, moduł sprawdzający czas ... W twoim przypadku, aby wiedzieć, dlaczego jest tak wiele gettimeofday, wyłącz moduły apache, które mogą być odpowiedzialne za wywołanie gettimeofday. Być może jest zbyt wiele zapisów do wielu plików dziennika znajdujących się w różnych folderach.
źródło