PHP 5.5 zostało wydane i zawiera nowy moduł buforowania kodu o nazwie OPCache, ale wydaje się, że nie ma dla niego żadnej dokumentacji.
Więc gdzie jest dokumentacja i jak korzystać z OPcache?
PHP 5.5 zostało wydane i zawiera nowy moduł buforowania kodu o nazwie OPCache, ale wydaje się, że nie ma dla niego żadnej dokumentacji.
Więc gdzie jest dokumentacja i jak korzystać z OPcache?
Odpowiedzi:
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
:
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łów:
zend_extension="C:\Program Files\PHP5.5\ext\php_opcache.dll"
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).
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.
var_dump(opcache_get_configuration());
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.
var_dump(opcache_get_status());
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_reset();
opcache_invalidate()
:Unieważnia określony skrypt w pamięci podręcznej. Oznacza to, że skrypt zostanie ponownie przeanalizowany podczas następnej wizyty.
opcache_invalidate('/path/to/script/to/invalidate.php', true);
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:
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 .
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)
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
opcache.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):
yum install php56-opcache
a następnie uruchom ponownie apache.
Napotkałem to podczas konfigurowania Moodle. Dodałem następujące wiersze w pliku php.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
opcache.fast_shutdown = 0
github.com/zendtech/ZendOptimizerPlus/issues/146