Szkoda, że Dokumentacja NIE mówi nam, jak poprawnie skompilować opcache / wyłączyć go, ani obejść autoconf źródła PHP 5.6.24+, aby PHP się skompilowało! :-(
Filip OvertoneSinger Rydlo
@ Fred-ii- „Istnieje wiele ustawień, które mogą wymagać dostosowania. Zrozumienie, jak to działa i identyfikacja problemów podczas fazy stabilizacji procesu wydania PHP 5.5, bardzo pomoże”. ... Ten post na blogu nie jest zbyt pomocny. Nie wyjaśnia, jak zrozumieć, jak to działa lub jak najlepiej dostosować ustawienia :(
icc97
Odpowiedzi:
371
Instalacja
OpCache jest kompilowany domyślnie na PHP5.5 +. Jest jednak domyślnie wyłączone. Aby rozpocząć korzystanie z OpCache w PHP 5.5 +, musisz go najpierw włączyć. Aby to zrobić, musisz wykonać następujące czynności.
Zauważ też, że będziesz musiał użyć zend_extensiondyrektywy zamiast „normalnej” extensiondyrektywy, ponieważ wpływa ona na rzeczywisty silnik Zend (tj. Na rzecz, która uruchamia PHP).
Zwraca tablicę zawierającą aktualnie używaną konfigurację, której używa OpCache. Obejmuje to wszystkie ustawienia ini, a także informacje o wersji i pliki z czarnej listy.
Zwróci tablicę z informacjami o bieżącym stanie pamięci podręcznej. Informacje te będą obejmować między innymi: stan pamięci podręcznej (włączony, restart, pełny itp.), Użycie pamięci, trafienia, chybienia i kilka innych przydatnych informacji. Będzie także zawierać skrypty buforowane.
Resetuje całą pamięć podręczną. Oznacza to, że wszystkie możliwe skrypty z pamięci podręcznej zostaną ponownie przeanalizowane podczas następnej wizyty.
Coś w związku z PHP-CLI? Jak korzysta z niego CLI? Po ponownym uruchomieniu FPM OPCache resetuje się - czy wpływa to również na OPCache CLI? Czy interfejs OPCache CLI jest osobny, czy dzieli tę samą pulę pamięci podręcznej z FPM? Dzięki!
Shahriyar Imanov
3
OpCache był domyślnie włączony w mojej najnowszej instalacji na Ubuntu 14.04, apache 2.4.7, php 5.5.9.
jstats
cześć, na twoim trzecim zrzucie ekranu cache_full jest fałszywe, zakładam, że ma to związek z pełnym buforowaniem strony, czy możesz mi powiedzieć, jak to włączyć? (
spraw,
Mylę się, że nie chodzi o buforowanie całej strony, ale pokaże się jako prawda, jeśli pamięć używana przez pamięć podręczną jest pełna. W każdym razie dzięki!
brucekaushik
zend_extension = C: \ path \ to \ php_opcache.dll (win) - Dodawanie tej linii w php.ini działa poprawnie.
kalidasan
152
OPcache zastępuje APC
Ponieważ OPcache ma zastąpić moduł APC, nie jest możliwe równoległe uruchamianie ich w PHP. Jest to dobre do buforowania opkodu PHP, ponieważ żaden z nich nie wpływa na sposób pisania kodu.
Oznacza to jednak, że jeśli obecnie używasz APC do przechowywania innych danych (poprzez apc_store()funkcję), nie będziesz w stanie tego zrobić, jeśli zdecydujesz się użyć OPCache.
Musisz użyć innej biblioteki, takiej jak APCu lub Yac które przechowują dane we wspólnej pamięci PHP, lub przełącz się na coś takiego jak memcached, który przechowuje dane w pamięci w innym procesie niż PHP.
Ponadto OPcache nie ma odpowiednika miernika postępu wysyłania obecnego w APC. Zamiast tego należy użyć Postępu przesyłania sesji .
Ustawienia OPcache
Dokumentację OPcache można znaleźć tutaj ze wszystkimi wymienionymi tutaj opcjami konfiguracji . Zalecane ustawienia to:
; Sets how much memory to use
opcache.memory_consumption=128;Sets how much memory should be used by OPcache for storing internal strings ;(e.g. classnames and the files they are contained in)
opcache.interned_strings_buffer=8; The maximum number of files OPcache will cache
opcache.max_accelerated_files=4000;How often (in seconds) to check file timestamps for changes to the shared;memory storage allocation.
opcache.revalidate_freq=60;If enabled, a fast shutdown sequence is used for the accelerated code;The fast shutdown sequence doesn't free each allocated block, but lets;the Zend Engine Memory Manager do the work.
opcache.fast_shutdown=1;Enables the OPcache for the CLI version of PHP.
opcache.enable_cli=1
Jeśli korzystasz z dowolnej biblioteki lub kodu korzystającego z adnotacji kodu, musisz włączyć zapisywanie komentarzy:
opcache.save_comments=1
Jeśli wyłączone, wszystkie komentarze PHPDoc są usuwane z kodu, aby zmniejszyć rozmiar zoptymalizowanego kodu. Wyłączenie „Komentarze do dokumentu” może uszkodzić niektóre istniejące aplikacje i struktury (np. Doctrine, ZF2, PHPUnit)
Czy są to zalecane ustawienia dla środowisk produkcyjnych, programowania lub obu tych elementów?
marcvangend
1
Być może nieporozumienie z mojej strony, czym dokładnie jest opcache i do czego służy, ale skonfigurowałem go i przetestowałem za pomocą skryptu stanu PeeHaa poniżej. Wszystko działa. Ale wciąż zadaję pytanie OP. "Jak tego użyć?" To nie jest do buforowania widoków i tak jest?
isimmons 10.10.2013
3
@isimmons „OPcache poprawia wydajność PHP, przechowując prekompilowany kod bajtowy skryptu we wspólnej pamięci, eliminując w ten sposób konieczność ładowania i analizowania skryptów przez PHP przy każdym żądaniu”.
Danack 10.10.2013
1
@marcvangend Dobra uwaga! Myślę, że buforowanie ma sens tylko w produkcji, więc te konfiguracje to prawdopodobnie ustawienia produkcyjne.
Sliq,
3
Czy ktoś może wyjaśnić, dlaczego zalecana wydajność ustawień jest gorsza niż domyślna lub kiedy powinien zacząć działać?
RP
19
Zamierzam wpłacić moje dwa centy za to, czego używam opcache.
Stworzyłem rozbudowane środowisko z wieloma polami oraz metodami sprawdzania poprawności i wyliczeniami, aby móc rozmawiać z moją bazą danych.
Bez opcache
Kiedy korzystam z tego skryptu bez opcache i przesyłam 9000 żądań w 2,8 sekundy do serwera apache, maksymalizuje on przy 90-100% procesora przez 70-80 sekund, aż do momentu, gdy nadąży za wszystkimi żądaniami.
Total time taken: 76085 milliseconds(76 seconds)
Z włączoną opcache
Po włączeniu opcache działa z prędkością 25-30% procesora przez około 25 sekund i nigdy nie przekracza 25% wykorzystania procesora.
Total time taken: 26490 milliseconds(26 seconds)
Zrobiłem plik czarnej listy opcache, aby wyłączyć buforowanie wszystkiego oprócz frameworka, który jest statyczny i nie wymaga zmiany funkcjonalności. Wybieram wprost tylko pliki frameworka, abym mógł się rozwijać bez martwienia się o ponowne ładowanie / sprawdzanie poprawności plików pamięci podręcznej. Posiadanie wszystkiego w pamięci podręcznej oszczędza sekundę w sumie żądań25546 milliseconds
To znacznie zwiększa ilość danych / żądań, które mogę obsłużyć na sekundę, nawet jeśli serwer nawet nie poci się.
zend_extension=php_opcache.dll; opcache.memory_consumption=128; opcache.interned_strings_buffer=8; opcache.max_accelerated_files=4000; opcache.revalidate_freq=60; opcache.fast_shutdown=1; opcache.enable_cli=1; opcache.blacklist_filename="C:\xampp\php\cfg\opcache.blacklist;Wystarczy wymienić; z enter w pliku ini. Ale tego właśnie użyłem. głównie domyślne rzeczy
Tschallacka
1
btw, ja uruchamiając to z memcache, wykonując 2100 żądań bazy danych, sekunda uruchamia skrypt, którego używam w ciągu 150 mikrosekund (około
1/6
1
Opcache buforuje pliki php w skompilowanej formie w pamięci. Więc nie masz już narzutu czytania z dysku oraz kompilacji i optymalizacji plików przez parser php. Pamięć podręczna to coś, czego można użyć do przechowywania zmiennych między sesjami. Powiedzmy na przykład, że użytkownik ma skrypt aktualizacji, który żąda tych samych parametrów przez 10 sekund, podczas gdy użytkownik patrzy na ekran. Możesz użyć pamięci podręcznej pamięci do jednokrotnego skompilowania zapytania, a następnie nadal żądać skompilowanego zapytania z pamięci zamiast regenerować go.
Tschallacka
2
nie ma. opcache.revalidate_freq=60;określa, jak długo plik może żyć w pamięci w sekundach. gdy czas minie, kompiluje plik.
Tschallacka
3
W rzeczywistości opcache.revalidate_freqkontroluje, jak często skrypt jest sprawdzany pod kątem zmian (na podstawie tego, czy zmienił się jego znacznik czasu). Jeśli więc znacznik czasu skryptu pozostaje taki sam, jak podczas ostatniej kompilacji, nie zostanie ponownie skompilowany. Wszystko to przy założeniu, że nie zmieniłeś opcache.validate_timestampsustawienia, które jest domyślnie włączone.
jjlin
4
Z PHP 5.6 na Amazon Linux (powinno być tak samo na RedHat lub CentOS):
Odpowiedzi:
Instalacja
OpCache jest kompilowany domyślnie na PHP5.5 +. Jest jednak domyślnie wyłączone. Aby rozpocząć korzystanie z OpCache w PHP 5.5 +, musisz go najpierw włączyć. Aby to zrobić, musisz wykonać następujące czynności.
Dodaj następujący wiersz do
php.ini
:Zauważ, że gdy ścieżka zawiera spacje, powinieneś zawinąć ją w cudzysłów:
Zauważ też, że będziesz musiał użyć
zend_extension
dyrektywy zamiast „normalnej”extension
dyrektywy, ponieważ wpływa ona na rzeczywisty silnik Zend (tj. Na rzecz, która uruchamia PHP).Stosowanie
Obecnie można korzystać z czterech funkcji:
opcache_get_configuration()
:Zwraca tablicę zawierającą aktualnie używaną konfigurację, której używa OpCache. Obejmuje to wszystkie ustawienia ini, a także informacje o wersji i pliki z czarnej listy.
opcache_get_status()
:Zwróci tablicę z informacjami o bieżącym stanie pamięci podręcznej. Informacje te będą obejmować między innymi: stan pamięci podręcznej (włączony, restart, pełny itp.), Użycie pamięci, trafienia, chybienia i kilka innych przydatnych informacji. Będzie także zawierać skrypty buforowane.
opcache_reset()
:Resetuje całą pamięć podręczną. Oznacza to, że wszystkie możliwe skrypty z pamięci podręcznej zostaną ponownie przeanalizowane podczas następnej wizyty.
opcache_invalidate()
:Unieważnia określony skrypt w pamięci podręcznej. Oznacza to, że skrypt zostanie ponownie przeanalizowany podczas następnej wizyty.
Konserwacja i raporty
Istnieje kilka GUI, które pomagają w utrzymywaniu OpCache i generowaniu przydatnych raportów. Narzędzia te wykorzystują powyższe funkcje.
OpCacheGUI
Oświadczenie Jestem autorem tego projektu
Cechy:
Zrzuty ekranu:
URL: https://github.com/PeeHaa/OpCacheGUI
status opcache
Cechy:
Zrzut ekranu:
URL: https://github.com/rlerdorf/opcache-status
opcache-gui
Cechy:
Zrzut ekranu:
URL: https://github.com/amnuts/opcache-gui
źródło
OPcache zastępuje APC
Ponieważ OPcache ma zastąpić moduł APC, nie jest możliwe równoległe uruchamianie ich w PHP. Jest to dobre do buforowania opkodu PHP, ponieważ żaden z nich nie wpływa na sposób pisania kodu.
Oznacza to jednak, że jeśli obecnie używasz APC do przechowywania innych danych (poprzez
apc_store()
funkcję), nie będziesz w stanie tego zrobić, jeśli zdecydujesz się użyć OPCache.Musisz użyć innej biblioteki, takiej jak APCu lub Yac które przechowują dane we wspólnej pamięci PHP, lub przełącz się na coś takiego jak memcached, który przechowuje dane w pamięci w innym procesie niż PHP.
Ponadto OPcache nie ma odpowiednika miernika postępu wysyłania obecnego w APC. Zamiast tego należy użyć Postępu przesyłania sesji .
Ustawienia OPcache
Dokumentację OPcache można znaleźć tutaj ze wszystkimi wymienionymi tutaj opcjami konfiguracji . Zalecane ustawienia to:
Jeśli korzystasz z dowolnej biblioteki lub kodu korzystającego z adnotacji kodu, musisz włączyć zapisywanie komentarzy:
źródło
Zamierzam wpłacić moje dwa centy za to, czego używam opcache.
Stworzyłem rozbudowane środowisko z wieloma polami oraz metodami sprawdzania poprawności i wyliczeniami, aby móc rozmawiać z moją bazą danych.
Bez opcache
Kiedy korzystam z tego skryptu bez opcache i przesyłam 9000 żądań w 2,8 sekundy do serwera apache, maksymalizuje on przy 90-100% procesora przez 70-80 sekund, aż do momentu, gdy nadąży za wszystkimi żądaniami.
Total time taken: 76085 milliseconds(76 seconds)
Z włączoną opcache
Po włączeniu opcache działa z prędkością 25-30% procesora przez około 25 sekund i nigdy nie przekracza 25% wykorzystania procesora.
Total time taken: 26490 milliseconds(26 seconds)
Zrobiłem plik czarnej listy opcache, aby wyłączyć buforowanie wszystkiego oprócz frameworka, który jest statyczny i nie wymaga zmiany funkcjonalności. Wybieram wprost tylko pliki frameworka, abym mógł się rozwijać bez martwienia się o ponowne ładowanie / sprawdzanie poprawności plików pamięci podręcznej. Posiadanie wszystkiego w pamięci podręcznej oszczędza sekundę w sumie żądań
25546 milliseconds
To znacznie zwiększa ilość danych / żądań, które mogę obsłużyć na sekundę, nawet jeśli serwer nawet nie poci się.
źródło
zend_extension=php_opcache.dll; opcache.memory_consumption=128; opcache.interned_strings_buffer=8; opcache.max_accelerated_files=4000; opcache.revalidate_freq=60; opcache.fast_shutdown=1; opcache.enable_cli=1; opcache.blacklist_filename="C:\xampp\php\cfg\opcache.blacklist;
Wystarczy wymienić; z enter w pliku ini. Ale tego właśnie użyłem. głównie domyślne rzeczyopcache.revalidate_freq=60;
określa, jak długo plik może żyć w pamięci w sekundach. gdy czas minie, kompiluje plik.opcache.revalidate_freq
kontroluje, jak często skrypt jest sprawdzany pod kątem zmian (na podstawie tego, czy zmienił się jego znacznik czasu). Jeśli więc znacznik czasu skryptu pozostaje taki sam, jak podczas ostatniej kompilacji, nie zostanie ponownie skompilowany. Wszystko to przy założeniu, że nie zmieniłeśopcache.validate_timestamps
ustawienia, które jest domyślnie włączone.Z PHP 5.6 na Amazon Linux (powinno być tak samo na RedHat lub CentOS):
a następnie uruchom ponownie apache.
źródło
Napotkałem to podczas konfigurowania Moodle. Dodałem następujące wiersze w pliku php.ini.
intl -> http://php.net/manual/en/book.intl.php
źródło
opcache.fast_shutdown = 0
github.com/zendtech/ZendOptimizerPlus/issues/146