Jak dowiedzieć się z Apache, które strony powodują długi czas ładowania?

6

Jak mogę dowiedzieć się, które skrypty PHP najdłużej ładują się w Apache?

Tamara Wijsman
źródło

Odpowiedzi:

7

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.

memnoch_proxy
źródło
0

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.

John T.
źródło
0

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.

Chris Nava
źródło
2
Chris, może mógłbyś wymienić garść „porządnych” darmowych narzędzi do raportowania, które działają na logach Apache?
pbr
Chainsaw firmy Apache jest pierwszą, która przychodzi na myśl.
Chris Nava,
0

Y Wolny jest jednym ze sposobów sprawdzenia wydajności szybkości ładowania strony.

ukanth
źródło
Y Wolne jest trochę kiepskie, ponieważ możesz tylko określić czas ładowania strony na pasku stanu, a czasem czas ładowania nawet się nie pokazuje! Będziesz musiał ręcznie zapisać wszystkie czasy ładowania. Log byłby lepszy.
Brian T. Hannan,
0

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ź ...)

damusnet
źródło
0

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}'
Akira Yamamoto
źródło