2016-04-29 24 views
14

Mam jeden projekt ~ 4 lata, zacząłem od wersji 5.3 i Symfony 2.0, migrowałem do wersji 5.5 i S2.3. W tej chwili przeszedłem do wersji S2.8 i chcę przeprowadzić migrację do php 7.Symfony 2. Projekt migracji do php 7 z php5.5. Problemy z wydajnością

Ponieważ było tak dużo wokół wydajności PHP 7, bardzo chciałem przetestować wydajność mojego projektu w dev env.

Tak działający benchmark w dev env; usługa jest na vagrantowym hoście mającym zarówno php5-fpm, jak i php7.0-fpm, wyłączając jeden i ustawiając drugi.

Spodziewałbym się, że php7 będzie lepszy od php5, ale w zasadzie wygląda na to, że php7 jest 1,5-2 razy wolniejszy na moim lokalnym dev env.

Co robię źle? A może powinienem jakoś przepisać moją aplikację?

phpinfo: php 7 http://pastebin.com/a6a76vE2 php 5 http://pastebin.com/4GBXNmBB

P.S. Tak, rozumiem, że testy wydajności w lokalnym dev env nie są w 100% poprawne i czyste, ale muszę tylko zrozumieć, czy php7 jest szybszy niż php5, jak to powiedział.

U1

Najzabawniejsze jest to, że blackfire jasno pokazuje, że php 7 wynosi ~ 45% szybciej niż PHP 5. Ale kiedy jestem sieging, niż widzę, że obniża wydajność.

U2

Tu jest mniej lub bardziej moja konfiguracja zwyczaj dev ENV. To samo dotyczy php5.5 i php7:

[Date] 
date.timezone = Europe/Tallinn 

[PHP] 
memory_limit = 512M 
expose_php = Off 
cgi.fix_pathinfo = 0 
post_max_size = 10M 
upload_max_filesize = 10M 
max_execution_time = 60 
realpath_cache_size = 4096k 
realpath_cache_ttl = 7200 

error_reporting = E_ALL | E_STRICT 
log_errors = On 
error_log = /var/log/php.errors.log 

display_errors = On 
display_startup_errors = On 
html_errors = On 

; xdebug 
xdebug.remote_enable = On 
xdebug.remote_port = 9001 
xdebug.max_nesting_level = 200 
xdebug.remote_log = /tmp/xdebug.log 
xdebug.remote_connect_back = on 
xdebug.idekey = "vagrant" 

[opcache] 
opcache.enable_cli=0 
opcache.save_comments=1 
opcache.memory_consumption=128 
opcache.interned_strings_buffer=8 
opcache.max_accelerated_files=66000 
opcache.fast_shutdown=1 
opcache.enable=1 
opcache.revalidate_freq=5 
opcache.validate_timestamps=1 
+0

@VaheShadunts, doskonale dla Ciebie. Jakieś wskazówki, na co patrzeć? Może być jakieś ustawienia opcache, poprawki w konfiguracji aplikacji lub buforowanie bootstrap? –

+0

Czy próbowałeś uruchomić testy na innym komputerze lub w innej konfiguracji? –

+0

@ A.L Myślę, że mój problem jest bardziej związany z konfiguracją niż z maszyną. Ale nie jestem pewien, czego szukać. Zasadniczo konfiguracja php-fpm jest taka sama, konfiguracja puli jest taka sama. Kod jest taki sam. Więc nie mam jasnej wskazówki. –

Odpowiedz

0

Powodem tego będzie na pewno xdebug. Wyłącz go, a następnie sprawdź wydajność.

Muszę zaznaczyć, że w naszym przypadku po przejściu z PHP5.5/Symfony 2.0 na PHP7/Symfony 3.0 napotkaliśmy spadek wydajności. Było to spowodowane tym, jak Symfony 2.8+ obsługuje sesje php. Przechowuje je w lokalnym katalogu zamiast katalogu standard/tmp, który prawie zawsze jest przechowywany w pamięci RAM. Jeśli więc masz dość dużą liczbę plików sesji, wyszukiwanie pliku z dysku twardego zajmuje dużo czasu w porównaniu do pamięci RAM.

Po usunięciu tego w konfiguracji Symfony, aplikacja zaczęła pokazywać wzrost wydajności, na który liczyliśmy.

1

kilka kroków do optymalizacji kodu PHP świecie i PHP7:

  • kompozytor SelfUpdate
  • zmiana kompozytor
  • kompozytor dumpautoload -a
  • aktywacji opcache zend (lub innego zainstalowany php opcache)
  • w php.ini:
    • opcache.max_acce lerated_files = 20000 (lub więcej)
    • opcache.validate_timestamps = 1
    • opcache.revalidate_freq = 10 (lub więcej)
    • xdebug.default_enable = 0
  • restart usługi php-fpm7

Jeśli problemy z wydajnością nadal utrzymują, profil typowy stronę testową z blackfire.