Działam jako sysadmin dla kilku serwerów, które przechowują strony Magento i czasami wypełniają się plikami sesji.
Powiedziano mi, że zarządzanie tymi plikami nie jest czymś, co można zrobić z poziomu Magento, i przypuszczam, że ich tymczasowe użycie oznacza, że nie można ich po prostu wyłączyć, ale wydaje się dziwne, że Magento nie ma sposobu na usunięcie tych plików akta?
Moje rozwiązanie to nocny crontab, który wykonuje coś takiego, find /path/to/magento/sessions/ -name "sess*" -type f -delete
ale co najmniej nie wydaje się być grzeczny.
Jak najlepiej sobie z tym poradzić?
źródło
W przypadku sesji opartych na plikach będą one automatycznie przycinane przez crona do czyszczenia sesji PHP - więc pliki prawdopodobnie zostaną usunięte w ciągu ~ 7200 sekund od utworzenia. Tak więc nawet na ruchliwej stronie (30 000 unikalnych użytkowników dziennie) w ./var/session zwykle znajduje się tylko około 4000 plików sesji - co nie jest niczym nawet dla niskiej klasy serwera Linux.
Jednak czyszczenie w rzeczywistości zależy od działania crona - który zwykle nie szuka w katalogu ./var/session Magento. Powinieneś więc skonfigurować nowy systemowy cron
Domyślny okres czyszczenia dla sesji wynosi 7200 sekund, co powinno być więcej niż wystarczające, chociaż można zmienić powyższe w celu dopasowania.
W przypadku sesji Memcache TCP / IP to jedyny narzut - który w przypadku wdrożenia na jednym serwerze sprawiłby, że byłby wolniejszy niż oparty na plikach. Zatem użyłbyś zamiast tego gniazda unixowego, które usuwa to obciążenie i daje większe bezpieczeństwo. Ale nawet sesje klienta zostaną obcięte / ograniczone pod względem ilości pamięci RAM, którą można przydzielić. Średnia sesja Magento to 4Kb - więc będziesz w stanie obsłużyć 256 aktywnych sesji na przydzielony MB. Należy więc ustawić odpowiedni limit, aby uniknąć przypadkowej utraty koszyka / sesji przez klientów. Pamiętaj też, że ponowne uruchomienie demona Memcache usunie wszystkie istniejące sesje (BAD!).
Dzięki Redis (nie natywnemu, ale dostępnemu przez rozszerzenie) otrzymujesz podobny poziom wsparcia jak Memcache, ale z dodatkowymi zaletami trwałości (jeśli chcesz go użyć). Dzięki rozszerzeniu Cm_Redis będziesz mógł również skorzystać z kompresji sesji. Odkryliśmy, że to rozszerzenie działa bardzo dobrze zarówno we wdrożeniach CE, jak i EE.
Przy DB, domyślne ustawienie ważności suszonych śliwek to potężny 1 tydzień, więc biorąc pod uwagę powyższy rozmiar sklepu jako przykład (30 tys. Unikatów dziennie), będziesz patrzył na rozmiar tabeli DB dla core_cache_session około 7 GB - co będzie szlifować Twój sklep całkowicie się zatrzyma, na prawie każdą operację opartą na sesji.
Z doświadczenia hostingu zarówno dużych (230 tys. Unikalnych odwiedzających dziennie), jak i małych (<1 tys. Unikalnych odwiedzających dziennie), zalecamy:
Wdrożenie na jednym serwerze - pliki
Wdrożenie na wielu serwerach - Redis (przy użyciu oddzielnej bazy danych od głównej pamięci podręcznej Magento)
Napisałem kilka naprawdę dokładnych odpowiedzi tutaj http://magebase.com/magento-tutorials/magento-session-storage-which-to-choose-and-why/comment-page-1/#comment-1980
źródło
Jakiś czas temu zadałem powiązane pytanie:
https://stackoverflow.com/questions/7828975/php-garbage-collection-clarification
To, czego nigdy się nie dowiedziałem (zostawiłem tę pracę na nową, a pierwotny problem stał się czyjąś inną), dotyczy tego, czy sesje Magento będą honorować te ustawienia, czy też zaimplementują obsługę sesji za pomocą Zend (i prawdopodobnie jakiegoś rodzaju zend.ini plik konfiguracyjny).
Ustawienia php do obejrzenia:
session.gc_maxlifetime
session.gc_probability
session.gc_divisor
http://php.net/manual/en/session.configuration.php#ini.session.gc-probability
źródło
Zwykle wystarcza praca crona, ale oto kilka rzeczy, o których należy pamiętać:
1) Ustaw sesję tak, aby nie trwała dłużej niż
session.gc_maxlifetime
(php -i | grep session.gc_maxlifetime
) sekundy (spowoduje to skonfigurowanie wygasłych sesji, które będą przygotowane do odśmiecania przez php.ini lub .htaccess)2) Możesz zapisać sesje w bazie danych , aby uzyskać więcej informacji o tym, jak to zrobić (ta opcja może być łatwiejsza do zarządzania za pomocą niestandardowego modułu magento)
3) Inną opcją do rozważenia jest to, że Memcached, która może również przyspieszyć serwery (choć nie jest całkowicie związana z pytaniem, myślę, że warto o tym wiedzieć)
Zobacz to pytanie, aby uzyskać więcej informacji: https://stackoverflow.com/questions/4353875/how-long-do-the-magento-session-files-need-to-be-kept
źródło
find
s wszystkie pliki starsze niżsess.gc_maxlifetime
i usuwa. Usuwanie sesji za pomocą crona to normalne, bezpieczne i dopuszczalne zachowanie.session.gc_probability
isession.gc_divisor
. Jeśli różne skrypty mają różne wartości dlasession.gc_maxlifetime
tej o najniższej wartości, określi, jak długo rzeczy się zawieszają, ponieważ pamięć sesji jest globalna, a wykonanie tego skryptu wyczyści obiekty sesji innych skryptów.We wszystkich naszych konfiguracjach mamy plik Maintenance.php, który od czasu do czasu zajmuje się czyszczeniem logów i katalogu var. Ponieważ sesje muszą być zapisane w bazie danych lub w systemie plików, ten plik konserwacji wyczyści je oba. (Zobacz kod poniżej).
Aby wyczyścić dzienniki, możesz uruchomić następujące polecenie jako zadanie cron:
Powyższe polecenie wygeneruje następujące dane wyjściowe:
Aby wyczyścić folder var, możesz uruchomić następujące polecenie jako zadanie cron:
Powyższe polecenie wygeneruje następujące dane wyjściowe:
Rzeczywisty kod (nie zapomnij dostosować ścieżki do pliku local.xml):
źródło
W przypadku Magento CMS i tym podobnych (które nie usuwają starych sesji), po prostu używam zadań cron opartych na ustawieniach php.ini.
PHP5 / Ubuntu 14.04 / Debian
Systemowa konfiguracja cron.d dla php5 nie czyści Magento ./var/session (ani niczego poza domyślnym folderem sesji (/ var / lib / php5 dla Ubuntu i / var / lib / php5 / session lub / tmp / dla większości innych Linuksa) dists).
Ale nadal możesz używać „sessionclean” i „maxlifetime” zgodnie z domyślnym cronem systemu php5 / Debian:
Przykład, który możesz wypróbować z wiersza poleceń:
Więc po prostu włącz to do crontab systemu / root lub crontab użytkownika, który ma uprawnienia do odczytu / zapisu plików sesji:
Dodaj, jeśli chcesz, aby wyglądał podobnie do systemowego php crona:
lub - skoro wiemy, że te pliki / katalogi istnieją:
Teraz mam możliwą do zarządzania liczbę sesji i jest utrzymywana w czystości przez domyślne śmieciowanie / czas życia poprzez ustawienia php.ini (cli).
(Możesz zostawić symbol wieloznaczny powyżej lub zastąpić nazwą witryny.)
EDYCJA (PHP7 / Ubuntu 16.xx / Debian):
Skrypt „sessionclean” zmienił się, a skrypt maksymalny okres użytkowania został usunięty. Dla zadania system / php cron jest to teraz jeden skrypt. Naprawdę nie możesz już tego używać, ponieważ wywołania plików są teraz statyczne dla skryptu.
Starszy skrypt php5 sessionclean może nadal działać, jeśli system się nie czyści. Co możesz zrobić, to pobrać starszy pakiet php5 Debiana i wypakować
sessionclean
go. Możesz też po prostu skopiować to do obszaru skryptów (podając odpowiednie uprawnienia / własność / var / www / (strona)):Polecam także zmienić jego nazwę, aby nie mylić go z nowym cronjobem php 'sessionclean'. Następnie możesz podłączyć swój własny „maksymalny okres użytkowania” w następujący sposób:
(61 to wiek przykładowy (w minutach), a „MySessionClean” to zmieniony skrypt php5 pobrany lub skopiowany z góry).
W ten sposób unikamy wywołań php.ini / env.
(EDYCJA 13DEC2016: Zaktualizowano DEBIAN ARCHIWUM REPO LINK)
źródło
Wyczyściłem DB regularnie ze wszystkich tych starych plików sesji. Do czasu zainstalowania Magento Optimizer była to irytująca praca ręczna, która sprawia, że cała ta rutyna działa dla mnie. Ponadto moja pamięć podręczna jest stale odświeżana i nie zmieniam jej ręcznie po zmianie produktów i bloków statycznych. Och, tak, raporty błędów i porzucone wózki również są czyszczone.
źródło
Ze wszystkich powyższych komentarzy uważam, że jest to łatwe rozwiązanie i mam nadzieję, że będzie ono lepsze niż długie skrypty i instalowanie rozszerzenia innej firmy w celu zarządzania starymi plikami sesji i zachowania nowych plików sesji.
magento
folderze.źródło
W moim przypadku uruchamiam ten skrypt umieszczony w
magento/var/
katalogu, aby usunąć pliki sesji-mtime +7
starsze niż tydzień ( ):To mój pierwszy skrypt bash (wersja 2) i myślę, że można go zoptymalizować pod wieloma względami. Jestem otwarty na wszelkie sugestie dotyczące optymalizacji.
Ten skrypt można pobrać ze strony: https://gist.github.com/Nolwennig/a75dc2f8628be2864bb2
źródło
Stworzyłem skrypt, który opróżnia katalog var / session. Możesz dodać go do zadania crona, aby uruchamiało się raz dziennie, co powinno wystarczyć i odpowiednio dostosowywać. Zauważysz, kiedy katalog sesji zostanie zapełniony, nie da się usunąć plików przez cpanel lub ssh, ten skrypt zrobi lewy w katalogu głównym magento.
źródło