2009-06-04 11 views
8

Pracuję nad zoptymalizowaniem mojej strony, a ja już miałem wolne loginy MySQL od kilku dni, ale po przejściu ponad 260 000 zapytań, zalogowałem się tylko 6 powolnych zapytań, a te były wykonywane przeze mnie na phpMyAdmin. Zastanawiam się, czy istnieje coś do zapisania wolnego czasu wykonywania strony PHP, aby znaleźć pewne strony, które hogging zasobów, a nie konkretnych zapytań.Odpowiednik PHP do dziennika powolnego zapytania MySQL?

+0

To może być to, że zapytania phpMyAdmin jest niski priorytet, które mogłyby spowodować ich, aby pokazać się jako „powolny” – karim79

+0

właśnie wspomnieć, że aby powiedzieć że żadne z nich nie wymagało optymalizacji w witrynie. –

+2

Jeśli potrzebujesz dokładniejszych pomiarów niż w zaakceptowanej odpowiedzi, aby znaleźć miejsce w dokumencie, w którym wąskie gardło jest - możesz sprawdzić wartość odniesienia z PEAR. Pozwala ci ustawić znaczniki w kodzie, aby znaleźć szyjki butelek. –

Odpowiedz

10

Najpierw jest xdebug, który ma profiler, ale nie użyłbym tego na maszynie produkcyjnej, ponieważ wstrzykuje kod i przyspiesza indeksowanie. Bardzo dobre dla środowisk testowych.

Jeśli chcesz mierzyć prędkości w produktywnym środowisku, chciałbym tylko mierzyć ręcznie. microtime() to funkcja dla tych rzeczy w PHP. Zakładając, że masz header.php i footer.php który sprawdzony przez wszystkich skryptów PHP:

# In your header.php (or tpl) 
$GLOBALS['_execution_start'] = microtime(true); 

# In your footer.php (or tpl) 
file_put_contents(
    '/tmp/my_profiling_results.txt', 
    microtime(true) - $GLOBALS['_execution_start'] . ':' . print_r($_SERVER, true) . "\n", 
    FILE_APPEND 
); 
+0

Dzięki, twoja druga sugestia to dobry pomysł. Miałem nadzieję, że będzie jakiś sposób, żeby to zautomatyzować, ale działa to równie dobrze bez większego wysiłku. –

+0

Och, jedna rzecz do dodania do tego. FILE_APPEND należy dodać jako flagę, aby nie tylko uzyskać najnowszy dostęp do dziennika. –

+0

Thx, zawsze zapominam, że :) – soulmerge

4

Można owinąć swoje skrypty w prosty zegar, tak:

/*in your header or at the top of the page*/ 
$time_start = microtime(true); 

/* your script goes here */ 

/*in your footer, or at the bottom of the page*/ 
$time_end = microtime(true); 
$time = $time_end - $time_start; 
echo "It took $time seconds\n"; 

Zauważ, że będzie dodać dwie egzekucje funkcyjne i odrobinę matematyki jako napowietrznych.

1

Jeśli używasz FastCGI do wykonywania skryptów PHP można użyć Menedżera FastCGI Process (FPM, PHP-FPM), który wspiera także tak zwany "slowlog".

Możesz go włączyć w konfiguracji php swojego php-fpm (dla debiana jest to /etc/php5/fpm/pool.d/www.conf) z opcjami konfiguracyjnymi: request_slowlog_timeout i slowlog.

request_slowlog_timeout

Timeout dla służąc pojedynczego żądania, po którym backtrace PHP będzie zrzucana do 'slowlog' pliku. Wartość "0" oznacza "Wył.". Dostępne jednostki: s (econds) (domyślnie), m (inutes), h (nasz) lub d (ays). Wartość domyślna: 0.

slowlog

Plik dziennika dla wolnych wniosków. Wartość domyślna: # INSTALL_PREFIX #/log/php-fpm.log.slow.

z http://php.net/manual/en/install.fpm.configuration.php

również zobaczyć: http://php.net/manual/en/install.fpm.php i http://rtcamp.com/tutorials/php/fpm-slow-log/

Powiązane problemy