Jak korzystać z PHP OPCache?
PHP 5.5 został wydany i zawiera nowy moduł buforowania kodu o nazwie OPCache, ale wydaje się, że nie ma dla niego żadnej dokumentacji.
Gdzie jest dokumentacja i jak używać OPcache?
5 answers
Instalacja
OpCache jest domyślnie kompilowany na PHP5.5+. Jednak jest domyślnie wyłączona. Aby zacząć używać OpCache w PHP5.5+, najpierw musisz go włączyć. Aby to zrobić, musisz wykonać następujące czynności.
Dodaj do swojego php.ini
następujący wiersz:
zend_extension=/full/path/to/opcache.so (nix)
zend_extension=C:\path\to\php_opcache.dll (win)
Zauważ, że gdy ścieżka zawiera spacje, powinieneś zawinąć ją w cudzysłowy:
zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"
Zauważ również, że będziesz musiał użyć dyrektywy zend_extension
zamiast "normalnej" dyrektywy extension
ponieważ wpływa na rzeczywisty silnik Zend (tzn. na to, co uruchamia PHP).
Użycie
Obecnie istnieją cztery funkcje, z których można korzystać:
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 na czarnej liście.
var_dump(opcache_get_configuration());
opcache_get_status()
:
Zwróci tablicę z informacją o bieżącym stanie cache. Informacje te będą obejmować takie rzeczy jak: stan pamięci podręcznej (włączone, ponowne uruchomienie, pełne itp.), zużycie pamięci, trafienia, chybienia i kilka innych przydatnych informacji. Będzie również zawierać Skrypty buforowane.
var_dump(opcache_get_status());
opcache_reset()
:
Resetuje całą pamięć podręczną. Oznacza to, że wszystkie możliwe skrypty w pamięci podręcznej będą przetwarzane ponownie przy następnej wizycie.
opcache_reset();
opcache_invalidate()
:
Unieważnia określony skrypt buforowany. Co oznacza, że skrypt będzie analizowany ponownie przy następnej wizycie.
opcache_invalidate('/path/to/script/to/invalidate.php', true);
Konserwacja i raporty
Istnieje kilka GUI, które pomagają utrzymać OpCache i generować przydatne raporty. Narzędzia te wykorzystują powyższe funkcje.
OpCacheGUI
Disclaimer Jestem autorem tego projektu
Cechy:
- status OpCache
- konfiguracja OpCache
- statystyki OpCache
- OpCache reset
- przegląd skryptów pamięci podręcznej
- cached scripts invalidation
- wielojęzyczny
- Obsługa urządzeń mobilnych
- błyszczące wykresy
Screeny:
URL: https://github.com/PeeHaa/OpCacheGUI
OPcache-status
Cechy:
- status OpCache
- OpCache konfiguracja
- statystyki OpCache
- przegląd skryptów pamięci podręcznej
- pojedynczy plik
Zrzut ekranu:
URL: https://github.com/rlerdorf/opcache-status
OPcache-gui
Cechy:
- status OpCache
- konfiguracja OpCache
- statystyki OpCache
- OPcache reset
- przegląd skryptów pamięci podręcznej
- Cached scripts unieważnienie
- Automatyczne odświeżanie
Zrzut ekranu:
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
2014-12-04 00:00:46
OPcache zastępuje APC
Ponieważ OPcache jest przeznaczony do zastąpienia modułu APC, nie jest możliwe ich równoległe uruchamianie w PHP. Jest to dobre dla buforowania kodu PHP, ponieważ nie ma to wpływu na sposób pisania kodu.
Oznacza to jednak, że jeśli obecnie używasz APC do przechowywania innych danych (poprzez apc_store()
funkcja) nie będziesz mógł tego zrobić, jeśli zdecydujesz się użyć OPCache.
Będziesz musiał użyć innej biblioteki, takiej jak APCu lub [[14]}YAC które zarówno przechowują dane we współdzielonej pamięci PHP, lub przełączają się na użycie czegoś takiego jak memcached, który przechowuje dane w pamięci w oddzielnym procesie do PHP.
Ponadto OPcache nie ma odpowiednika miernika postępu przesyłania obecnego w APC. Zamiast tego powinieneś użyć postęp wysyłania sesji .
Ustawienia dla OPcache
Dokumentacja OPcache znajduje się tutaj ze wszystkimi opcjami konfiguracyjnymi wymienionymi tutaj . Polecane 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 używasz dowolnej biblioteki lub kodu, który używa adnotacji, musisz włączyć Zapisz komentarze:
opcache.save_comments=1
Jeśli jest wyłączona, wszystkie komentarze PHPDoc są usuwane z kodu, aby zmniejszyć rozmiar zoptymalizowanego kodu. Wyłączenie "komentarzy Doc" może się zepsuć niektóre istniejące aplikacje i frameworki (np. Doctrine, ZF2, PHPUnit)
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
2014-04-28 22:52:10
Zamierzam wrzucić moje dwa grosze za to, co używam opcache.
Zrobiłem obszerny framework z wieloma polami, metodami walidacji i enumami, aby móc rozmawiać z moją bazą danych.
Bez opcache
Gdy używam tego skryptu bez opcache i wciskam 9000 żądań w 2.8 sekundy do serwera apache, to maksymalna wartość 90-100% cpu wynosi 70-80 sekund, dopóki nie dogoni wszystkich żądań.
Total time taken: 76085 milliseconds(76 seconds)
Z opcache enabled
Z włączonym opcache działa z 25-30% czasu procesora przez około 25 sekund i nigdy nie przekazuje 25% zużycia procesora.
Total time taken: 26490 milliseconds(26 seconds)
Zrobiłem plik czarnej listy opcache, aby wyłączyć buforowanie wszystkiego z wyjątkiem frameworka, który jest statyczny i nie wymaga zmiany funkcjonalności. Wybieram jawnie tylko dla plików frameworku, aby móc rozwijać się bez martwienia się o przeładowanie / walidację plików pamięci podręcznej. Posiadanie wszystkiego w pamięci podręcznej oszczędza sekundę na sumie of the requests 25546 milliseconds
To znacznie zwiększa ilość danych / żądań, które mogę obsłużyć na sekundę, bez nawet najmniejszego potu serwera.
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-02-12 12:04:23
Z PHP 5.6 na Amazon Linux (powinno być to samo na RedHat lub CentOS):
yum install php56-opcache
A następnie uruchom ponownie apache.
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-03-03 23:33:48
Spotkałem się z tym podczas konfigurowania moodle. Dodałem następujące linie w php.plik ini.
zend_extension=C:\xampp\php\ext\php_opcache.dll
[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0
; If something does not work in Moodle
;opcache.revalidate_path = 1 ; May fix problems with include paths
;opcache.mmap_base = 0x20000000 ; (Windows only) fix OPcache crashes with event id 487
; Experimental for Moodle 2.6 and later
;opcache.fast_shutdown = 1
;opcache.enable_cli = 1 ; Speeds up CLI cron
;opcache.load_comments = 0 ; May lower memory use, might not be compatible with add-ons and other apps
extension=C:\xampp\php\ext\php_intl.dll
[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING
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-08-30 19:46:37