Jak mogę dowiedzieć się, które skrypty PHP najdłużej ładują się w Apache?
Jak mogę dowiedzieć się, które skrypty PHP najdłużej ładują się w Apache?
Odpowiedzi:
Można to zrobić na kilka sposobów.
1: Włącz mod_status na swoim serwerze. Pozwala to uzyskać przegląd tego, jak ogólnie zachowuje się serwer apache, przeglądając stronę / server-status /. Pamiętaj, aby ograniczyć dostęp do tej lokalizacji:
ExtendedStatus on
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.0.0/24
</Location>
2: Zmodyfikuj dyrektywę LogFormat, aby wydłużyć czas przetwarzania. Następnie możesz powiązać identyfikatory URI z czasami odpowiedzi:
LogFormat "%h %t \"%r\" %b sec:%T usec:%D"
Spowoduje to wyświetlenie zdalnego adresu IP, daty i godziny żądania, żądania, wysłanych bajtów, sekund i mikrosekund.
3: W przypadku rozmiaru pamięci skryptu i współczynnika trafień skryptów konsola administracyjna dostarczana z Xcache jest bardzo dobra. Skrypty o dużych klasach dziedziczenia mogą zostać rozszerzone do wielu megabajtów pamięci.
4: Profilowanie skryptów php może pomóc. Jeśli chcesz skoncentrować się na profilowaniu pojedynczego skryptu, Xdebug z pewnością pomoże. Użytkownik Damien sugeruje sposób. Sugerowałbym rejestrowanie zużycia pamięci, a także używanie mikrotimu, ale ustalenie progu logowania onit, na przykład:
$THRESH = 2;
$profile = array();
$profile['start'] = microtime( true );
// stuff
$profile['end'] = microtime( true );
$profile['delta'] = $profile['end'] - $profile['start'];
if( $profile['delta'] >= $THRESH )
error_log( __FILE__.": ".$profile['delta']." seconds " );
Dostosowanie progu sprawia, że kłody są znacznie czystsze.
Uruchom je za pomocą Apache JMeter .
Apache JMeter może być używany do testowania wydajności zarówno zasobów statycznych, jak i dynamicznych (pliki, serwlety, skrypty Perla, obiekty Java, bazy danych i zapytania, serwery FTP i inne). Można go użyć do symulacji dużego obciążenia serwera, sieci lub obiektu w celu przetestowania jego wytrzymałości lub do analizy ogólnej wydajności przy różnych typach obciążenia. Można go użyć do graficznej analizy wydajności lub do przetestowania zachowania serwera / skryptu / obiektu pod dużym obciążeniem równoległym.
Uruchom dzienniki serwera za pomocą narzędzia do raportowania. Przyzwoity powinien być w stanie powiedzieć, jak długo przeciętny użytkownik pobiera każdą stronę. Powinien także pokazywać minimalny i maksymalny czas pobierania dla każdej strony oraz wiele innych statystyk.
Y Wolny jest jednym ze sposobów sprawdzenia wydajności szybkości ładowania strony.
W zależności od twojego skryptu (ów) możesz użyć funkcji mikrotime:
$stime = microtime();
$stime = explode(" ",$stime);
$stime = $stime[1] + $stime[0];
//Some Code...
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$totaltime = ($mtime - $stime);
echo $totaltime;
Rób tyle przerw, ile potrzebujesz, aby znaleźć wadliwą część kodu.
(Ale może to powinna być SO odpowiedź ...)
Używam tego polecenia, aby określić, co trwa zbyt długo, aby odpowiedzieć:
$ w3m http://localhost/server-status | tee | grep "GET\|HEAD\|POST" | awk '{if ($6>15) print}'