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?

 225
Author: Danack, 2013-06-21

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:

status

cached-scripts

wykresy

mobilr

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:

status

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:

opcache-gui-przegląd

URL: https://github.com/amnuts/opcache-gui

 357
Author: PeeHaa,
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)

 150
Author: Danack,
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.

 19
Author: Tschallacka,
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.

 4
Author: Roger Dueck,
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

Intl - > http://php.net/manual/en/book.intl.php

 2
Author: Anoop Toffy,
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