Wolny Czas Inicjalizacji Symfony2
Mam Symfony2 uruchomiony na Ubuntu Server 12.04 (64-bit) VM (VirtualBox). Gospodarzem jest MacBook pro. Z jakiegoś powodu dostaję naprawdę długi czas żądania w trybie deweloperskim (app_dev.php). Wiem, że jest wolniejszy w trybie dev, ale mówię o 5-7 sekundach na żądanie (czasami nawet wolniej). Na moim komputerze Mac dostaję czasy żądań 200ms lub tak w trybie deweloperskim.
Po przejrzeniu mojej osi czasu w Profilerze Symfony2 zauważyłem, że ~95% czasu żądania jest "Czas inicjalizacji". Co to jest? Jakie są powody, dla których może to być tak powolne?
Ten problem dotyczy tylko Symfony2 w trybie dev, a nie innych stron, które uruchamiam na maszynie wirtualnej, a nawet Symfony2 w trybie produkcyjnym.
I saw this (http://stackoverflow.com/questions/11162429/whats-included-in-the-initialization-time-in-the-symfony2-web-profiler)ale nie odpowiada na moje pytania.
9 answers
Miałem 5-30 sek odpowiedzi z Symfony2 domyślnie. Teraz jest ~500ms w środowisku dev.
Następnie zmodyfikowałem następujące rzeczy w php.ini
:
-
Zestaw
realpath_cache_size = 4M
(lub więcej) - wyłączone
XDebug
całkowicie (test zphpinfo
) - realpath_cache_ttl=7200
- włączone i ustawione
OPcache
(lub APC) poprawnie - ponownie uruchomiony Apache, aby mieć php.ini reloaded
I voilá, odpowiedzi były poniżej 2 SEK w trybie dev! Mam nadzieję, że to pomoże.
Przed: 6779 ms
Po: 1587 ms
Symfony2 odczytuje klasy z tysięcy plików i jest to powolny proces. Podczas korzystania z małej pamięci podręcznej PHP realpath ścieżki plików muszą być rozwiązywane jeden po drugim za każdym razem, gdy nowe żądanie jest składane w środowisku deweloperskim, jeśli nie znajdują się one w pamięci podręcznej PHP realpath. Pamięć podręczna realpath jest domyślnie zbyt mała dla Symfony2. W prod nie jest to problem oczywiście.
Metadane pamięci podręcznej:
Cache ' owanie metadanych (np. mapowania) jest również bardzo ważne dla dalszego zwiększenia wydajności:doctrine:
orm:
entity_managers:
default:
metadata_cache_driver: apc
query_cache_driver: apc
result_cache_driver: apc
Musisz włączyć APCu
w tym celu. Jest to APC
bez bufora bajtowego, ponieważ OPCache
już obsługuje buforowanie kodu OPC. OPCache
jest wbudowany od PHP 5.5.
---- po: 467 ms - - - -
(w środowisku prod ta sama odpowiedź to ~80 ms)
Uwaga, to jest projekt wykorzystuje 30+ pakiety i ma dziesiątki tysięcy linii kodu, prawie sto własnych usług, więc 0.5 s jest dość dobry w lokalnym środowisku Windows za pomocą zaledwie kilku prostych optymalizacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-24 21:12:43
Rozgryzłem przyczynę problemu (a nie Symfony2). Z jakiegoś powodu na maszynie wirtualnej ubuntu czasy modyfikacji niektórych plików są nieprawidłowe (np. w przyszłości itp.). Gdy symfony2 sprawdza te czasy używając filemtime() w swoim rejestrze, określa, że pamięć podręczna nie jest już świeża i odbudowuje całość. Jeszcze nie wiem, dlaczego to robi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-19 04:04:52
W związku z tym, że nie jestem w stanie się z Tobą skontaktować, nie mogę się z Tobą skontaktować. Został zainstalowany przy użyciu macports:
sudo port install php54-xdebug.
Z włączonym xdebug, każda strona kończy się maksymalnym czasem ładowania, z błędem krytycznym przekraczającym maksymalny czas wysyłania wiadomości. Po wyłączeniu wszystko ładuje się dobrze w rozsądnym przewidywanym czasie. W związku z tym, że nie jestem w stanie się z Tobą skontaktować, nie mam żadnych pytań. Mogę zmienić na inny debugger, to pitty, bo xdebug wcześniej działało dobrze.
Config:
- MacOSX 10.6.8
- macports 2.1.3
- Apache 2.2.24
- php 5.4
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-12 17:04:16
Mamy ten sam problem. Tutaj mamy 10 sekund i więcej na każde żądanie. Widzę, czy usuwam następujące linie w bootstrap.php.cache all times zwraca stan normalny (298 ms).
foreach ($meta as $resource) {
if (!$resource->isFresh($time)) {
return false;
}
}
Jest możliwe, że mamy złe czasy modyfikacji, ale nie wiemy, jak to naprawić. Ktoś zna rozwiązanie?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-07 08:52:37
Jak napisano w https://stackoverflow.com/a/12967229/6108843 powodem takiego zachowania mogą być Ustawienia maszyn wirtualnych Ubuntu. Należy zsynchronizować datę i godzinę między systemem operacyjnym hosta i gościa, jak wyjaśniono na https://superuser.com/questions/463106/virtualbox-how-to-sync-host-and-guest-time .
Data modyfikacji pliku zmienia wartość hosta podczas przesyłania pliku do maszyny wirtualnej przez FTP. Dlatego filemtime() zwraca złą wartość.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:40
Możesz przenieść APP/var/cache
/dev/shm/YourAppName/var/cache
. Ale dobrze jest mieć wbudowany kontener w plikach lokalnych również dla autouzupełniania IDE i walidacji kodu. W app/AppKernel.php
:
public function getCacheDir()
{
return $this->getVarOrShmDir('cache/' . $this->getEnvironment());
}
public function getLogDir()
{
return $this->getVarOrShmDir('logs');
}
private function getVarOrShmDir($dir)
{
$result = dirname(__DIR__) . '/var/' . $dir;
if (
in_array($this->environment, ['dev', 'test'], true) &&
empty($_GET['warmup']) && // to force using real directory add ?warmup=1 to URL
is_dir($result) && // first time create real directory, later use shm
file_exists('/bin/mount') && shell_exec('mount | grep vboxsf') // only for VirtualBox
) {
$result = '/dev/shm/' . 'YourAppName' . '/' . $dir . '/' . $this->getEnvironment();
}
return $result;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-21 08:54:07
Wyłączyłem xdebug i spowodowało to skrócenie czasu ładowania z 17s (tak..) do 0,5 s.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-13 13:34:23
Miałem również problemy z powolnym ładowaniem stron w rozwoju, co może być bardzo frustrujące, gdy poprawiasz CSS lub coś podobnego.
Po odrobinie kopania odkryłem, że dla mnie problem był spowodowany przez Assetic, który rekompilował wszystkie zasoby przy każdym załadowaniu strony:
Wyłączając korzystanie z kontrolera Assetic byłem w stanie drastycznie zwiększyć obciążenie mojej strony. Jednak, jak stwierdza powyższy link, wiąże się to z kosztami regeneracji zasobów za każdym razem, gdy wprowadzasz do nich zmiany (lub ustawiasz na nich zegarek).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-31 06:53:39
W app_dev, wszystkie pamięci podręczne i automatyczne ładowanie zaczyna się od zera, a to, co znalazłem najbardziej powolne w dev jest orm. Unikam używania orm i skupiam się głównie na dbal z tego powodu, chociaż chyba nie powinienem. Orm jest używany dość często w sf2. Myślę, że orm jest tym, co spowalnia Cię najbardziej w dev. Spójrz na różnicę między konfiguracją dev a konfiguracją prod. Jednak niektóre poprawki do konfiguracji deweloperów mogą sprawić, że rozwój będzie przyjemniejszy i przyjemniejszy.. Po prostu staraj się być świadomy tego, co twoja sprawka. na przykład wyłączenie kontrolera gałązki, a następnie modyfikacja wielu szablonów, będzie frustrujące. Musisz czyścić pamięć podręczną. Ale jak wspomniałeś, jego dev tylko i kiedy jego czas, aby przejść na żywo, symfony przyspieszy dla Ciebie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-16 02:02:28