Muszę wyczyścić wszystkie wpisy pamięci podręcznej APC, kiedy wdrażam nową wersję witryny. APC.php ma przycisk do czyszczenia wszystkich pamięci podręcznych kodu operacji, ale nie widzę przycisków do usuwania wszystkich wpisów użytkowników, wszystkich wpisów systemowych lub wszystkich wpisów w katalogu.
Czy można wyczyścić wszystkie wpisy pamięci podręcznej za pomocą wiersza poleceń lub w inny sposób?
php
performance
caching
apc
lo_fye
źródło
źródło
Odpowiedzi:
Możesz użyć funkcji PHP
apc_clear_cache
.Wywołanie
apc_clear_cache()
wyczyści pamięć podręczną systemu, a wywołanieapc_clear_cache('user')
wyczyści pamięć podręczną użytkownika.źródło
php -r "apc_clear_cache();"
Nie sądzę, aby którakolwiek z tych odpowiedzi faktycznie działała przy czyszczeniu pamięci podręcznej APC z wiersza poleceń. Jak skomentował Frank Farmer powyżej, CLI działa w procesie niezależnym od Apache.
Moim rozwiązaniem do czyszczenia z wiersza poleceń było napisanie skryptu, który kopiuje skrypt rozliczeniowy APC do
web
katalogu i uzyskuje do niego dostęp, a następnie usuwa go. Skrypt jest ograniczony do dostępu z lokalnego hosta.apc_clear.php
Jest to plik, który skrypt kopiuje do katalogu WWW, uzyskuje do niego dostęp i usuwa.
Skrypt do czyszczenia pamięci podręcznej
Ten skrypt kopiuje plik apc_clear.php do katalogu WWW, uzyskuje do niego dostęp, a następnie usuwa go. Jest to oparte na zadaniu Symfony. W wersji Symfony wywołania są wywoływane w postaci Symfony kopiuj i odłącz, która obsługuje błędy. Możesz chcieć dodać testy, które się powiodły.
źródło
Wiem, że to nie jest dla wszystkich, ale: dlaczego nie zrobić wdzięcznego restartu Apache?
Na przykład w przypadku Centos / RedHat Linux:
Ubuntu:
źródło
Nie jest to określone w dokumentacji, ale aby wyczyścić pamięć podręczną kodu operacyjnego, musisz:
EDYCJA: Wydaje się, że dotyczy to tylko niektórych starszych wersji APC.
Bez względu na to, jakiej wersji używasz, nie możesz wyczyścić pamięci podręcznej APC mod_php lub fastcgi ze skryptu php cli, ponieważ skrypt cli będzie uruchamiany z innego procesu, jak mod_php lub fastcgi. Musisz wywołać apc_clear_cache () z poziomu procesu (lub procesu potomnego), dla którego chcesz wyczyścić pamięć podręczną. Jednym z takich podejść jest użycie curl do uruchomienia prostego skryptu php.
źródło
Jeśli chcesz wyczyścić pamięć podręczną apc w poleceniu: (użyj sudo, jeśli tego potrzebujesz)
APCu
APC
źródło
Jeśli korzystasz ze stosu NGINX / PHP-FPM, najlepiej jest po prostu przeładować php-fpm
service php-fpm reload
(lub jakakolwiek twoja komenda przeładowania może być w twoim systemie)źródło
Zgodnie z definicją w dokumencie APC:
Aby wyczyścić pamięć podręczną, wykonaj:
źródło
Inną możliwością użycia wiersza poleceń, jeszcze nie wspomnianą, jest użycie curl.
Nie rozwiązuje to problemu dla wszystkich wpisów w pamięci podręcznej, jeśli używasz standardowego skryptu apc.php, ale może wywołać dostosowany skrypt lub inny, który umieściłeś.
Spowoduje to wyczyszczenie pamięci podręcznej kodu operacji:
Zmień parametr OB na 3, aby wyczyścić pamięć podręczną użytkownika:
Umieść obie linie w skrypcie i wywołaj go z $ PASSWORD w swoim pliku env.
źródło
Jeśli chcesz monitorować wyniki za pomocą json, możesz użyć tego rodzaju skryptu:
Jak wspomniano w innych odpowiedziach, ten skrypt będzie musiał być wywoływany przez http lub curl i będziesz musiał być zabezpieczony, jeśli zostanie ujawniony w katalogu głównym aplikacji. (przez ip, token ...)
źródło
apc_clear_cache () działa tylko na tym samym php SAPI, na którym chcesz wyczyścić pamięć podręczną. Jeśli masz PHP-FPM i chcesz wyczyścić pamięć podręczną apc, musisz to zrobić za pomocą jednego ze skryptów php, a NIE wiersza poleceń, ponieważ dwie pamięci podręczne są oddzielone.
Napisałem CacheTool , narzędzie wiersza poleceń, które rozwiązuje dokładnie ten problem i jednym poleceniem możesz wyczyścić pamięć podręczną APC PHP-FPM z wiersza poleceń (łączy się z php-fpm i wykonuje funkcje apc)
Działa również w przypadku opcache.
Zobacz, jak to działa tutaj: http://gordalina.github.io/cachetool/
źródło
Stajnia APC ma możliwość wyczyszczenia pamięci podręcznej w samym interfejsie. Aby wyczyścić te wpisy, musisz zalogować się do interfejsu apc.
APC ma opcję ustawienia nazwy użytkownika i hasła w pliku apc.php.
źródło
php-apc
zainstalowany pakiet w swoim systemie.jeśli uruchamiasz fpm pod ubuntu, musisz uruchomić poniższy kod (zaznaczone na 12 i 14)
źródło
apc.ini
apc.stat = "1" zmusi firmę APC do stat (sprawdzenia) skryptu przy każdym żądaniu w celu określenia, czy został on zmodyfikowany. Jeśli został zmodyfikowany, skompiluje ponownie i buforuje nową wersję.
Jeśli to ustawienie jest wyłączone, firma APC nie sprawdzi, co zwykle oznacza, że aby wymusić ponowne sprawdzenie plików przez firmę APC, konieczne będzie ponowne uruchomienie serwera WWW lub ręczne wyczyszczenie pamięci podręcznej. Należy pamiętać, że konfiguracje serwera WWW FastCGI mogą nie wyczyścić pamięci podręcznej po ponownym uruchomieniu. Na serwerze produkcyjnym, na którym pliki skryptów rzadko się zmieniają, wyłączone statystyki mogą znacznie zwiększyć wydajność.
źródło
Nowy interfejs administratora APC ma opcje dodawania / czyszczenia pamięci podręcznej użytkownika i pamięci podręcznej kodu operacji.Jedną interesującą funkcją jest dodawanie / odświeżanie / usuwanie katalogów z pamięci podręcznej opCode
Dokumentacja administratora APC
źródło
Dobrym rozwiązaniem dla mnie było po prostu zaprzestanie używania przestarzałej pamięci podręcznej użytkowników po wdrożeniu.
Jeśli dodasz prefiks do każdego z kluczy, możesz zmienić przedrostek przy zmianie struktury danych wpisów pamięci podręcznej. Pomoże ci to uzyskać następujące zachowanie podczas wdrażania:
Jest to możliwe tylko w przypadku pamięci podręcznej użytkownika.
źródło
Utwórz plik APC.php
Uruchom go z przeglądarki.
źródło
Moje obejście dla kompilacji Symfony mającej łupy z instancji na tym samym serwerze:
Krok 1. Utwórz wyzwalacz lub coś w celu ustawienia flagi pliku (np. Polecenie Symfony), a następnie utwórz
marker file
..Krok 2. W pliku indeksu na początku dodaj kod rozliczeniowy i usuń
marker file
.Krok 2. Uruchom aplikację.
źródło
Mieliśmy problem z APC i dowiązaniami symbolicznymi do dowiązań symbolicznych do plików - wydaje się, że ignoruje zmiany w samych plikach. W jakiś sposób pomogło dotknięcie samego pliku. Nie potrafię powiedzieć, jaka jest różnica między modyfikacją pliku a dotknięciem go, ale jakoś było to konieczne ...
źródło