Jak zidentyfikować problemy z limitem pamięci PHP w PrestaShop

Lista produktów ładuje się na pustą białą stronę. Import kończy się w wierszu 4,300, a następnie ponownie w wierszu 4,300 przy kolejnej próbie. Zdjęcie zostaje przesłane bez żadnych problemów i nigdy nie generuje miniatury. Trzy osoby zgłaszają trzy problemy, a przyczyna leży po jednej stronie.

Przyczyną jest pamięć. Dopóki coś się nie zepsuje, większość właścicieli sklepów nie zagląda do tego ustawienia, a kiedy już się zepsuje, to ustawienie zostaje obwinione za mnóstwo problemów, których nigdy nie spowodowało.

Poniżej znajdziesz informacje o tym, jak zidentyfikować problemy z limitem pamięci PHP w PrestaShop, jak potwierdzić, że to one są przyczyną problemu i co dalej zrobić. Niektóre z nich możesz sprawdzić samodzielnie; resztę informacji przekaż swojemu hostingodawcy.

1.0 Czym właściwie jest limit pamięci PHP

PrestaShop jest napisany w PHP. Za każdym razem, gdy ktoś ładuje stronę, uruchamiany jest skrypt, który ją buduje, a parametr memory_limit ogranicza ilość pamięci, jaką skrypt może wykorzystać.

Limit ten dotyczy jednego skryptu, a nie całej witryny i nie całego serwera, i niemal wszystkie niejasności w tym przypadku biorą się z tego rozróżnienia. 

W podręczniku PHP podano, że domyślna wartość memory_limit wynosi 128 MB.

Zatem serwer z 16 GB pamięci RAM może nadal zawieść przy 128 MB. Nikt nie kłamie co do sprzętu: PHP narzuca własny limit, znacznie poniżej dozwolonego przez maszynę, i zatrzymuje skrypt w momencie jego osiągnięcia. Duża ilość wolnej pamięci w połączeniu z komunikatem o wyczerpaniu pamięci w PrestaShop to typowa kombinacja, a błąd PHP o wyczerpaniu pamięci w PrestaShop oznacza to samo.

Dwa sufity, a ten, który jest niżej, to ten, który trafisz. Zostaw konfiguracje PHP w spokoju i dołóż RAM: nic się nie poprawi. Stąd rozczarowanie, gdy „po prostu zaktualizuj plan hostingowy” okazuje się nieskuteczne.

Plan hostingowy 2.0 a limit pamięci serwera PrestaShop

Patrząc na siebie, różnica jest wyraźniejsza:

Co to jestCo ograniczaTypowa wartośćKto to zmienia?
Limit pamięci PHPŁadowanie jednej strony128 MB na 512 MBTy lub Twój host w pliku konfiguracyjnym
Pamięć RAM serweraWszystko działa2 GB do 32 GBTwój plan hostingowy

Oba mają znaczenie, a sposób, w jaki zawodzą, wskazuje, który z nich masz. Osiągnięto limit PHP i jedna strona ulega awarii, podczas gdy sklep nadal obsługuje klientów. Skończyła się pamięć RAM i wszystko jednocześnie zwalnia, łącznie z bazą danych. Powolna witryna wskazuje na pamięć RAM lub ruch; jedna uszkodzona strona, a reszta działa, wskazuje na ten artykuł.

3.0 Dlaczego sklep PrestaShop traci pamięć

Istnieje prawdziwa odpowiedź na pytanie, dlaczego PrestaShopowi kończy się pamięć, a „oprogramowanie jest przeładowane” nie jest nią. Prowadzenie sklepu oznacza wykonywanie kilku naprawdę uciążliwych czynności, których strona broszurowa nigdy nie musi wykonywać. Cztery z nich mają tu znaczenie.

  1. Dane produktu są większe, niż się wydajeKażdy produkt zawiera opisy w każdym języku, w którym sprzedajesz, a także reguły cenowe, kategorie, kombinacje i stan magazynowy. Samo w sobie to nic. Poproś o pięć tysięcy naraz podczas eksportu, a arytmetyka szybko się zmieni.

2. Obrazy kosztują pamięć ze względu na wymiary, a nie rozmiar pliku : To zaskakuje. Otwórz zdjęcie o rozmiarze 3 MB i szerokości 6000 pikseli, a ono potrzebuje około 70 MB, zanim rozpocznie się zmiana rozmiaru. Waga pliku na dysku ledwo pozwala przewidzieć koszt przetwarzania, dlatego niektóre zdjęcia mają miniatury, a inne nie.

3. Wszystkie moduły ładują się razem : Twoja strona administracyjna ładuje i inicjalizuje każdy zainstalowany moduł na bieżąco, w tym czterdzieści, których ekran nigdy nie dotknie. Pojedynczo kosztują niewiele. Ugruntowany sklep obsługuje sześćdziesiąt modułów, a sześćdziesiąt to zupełnie inna sprawa.

4. Twój back office to ciężka część : więcej danych na ekranie, mniej skrótów, brak buforowania, które zapewnia szybkość działania sklepu. W ten sposób problem z pamięcią PHP w PrestaShop dotyka Ciebie i Twoich pracowników, podczas gdy klienci nie odczuwają żadnych skutków, co sprawia, że ​​jest niewidoczny dla osób płacących.

4.0 Objawy i komunikaty o błędach, na które warto zwrócić uwagę

Czasami wiadomość pojawia się na ekranie i wygląda tak:

Błąd krytyczny: Wyczerpano dopuszczalny rozmiar pamięci 134217728 bajtów
(próbowano przydzielić 20480 bajtów)

Weź te dwie liczby osobno. Po przeliczeniu z bajtów, 134217728 daje 128 MB, więc sklep działał z domyślnym limitem i wykorzystał całą przestrzeń. Warto o tym pamiętać, ponieważ komunikat informuje o aktualnych ustawieniach.

Ta druga liczba to mylący trop. Malutka, więc wygląda na winowajcę, ale nic z tych rzeczy: cokolwiek poprosiło o pamięć na końcu, po tym, jak wszystko inne się skończyło. Słoma, a nie obciążenie. Większość właścicieli sklepów namierza błąd alokacji pamięci w PrestaShop, znajdując tę ​​liczbę, i nie prowadzi ich to donikąd.

5.0 Błąd limitu pamięci PrestaShop, którego nigdy nie zobaczysz

Sklepy działające ukrywają błędy przed odwiedzającymi i słusznie. Wszystko, co techniczne w witrynie sklepowej, wygląda nieprofesjonalnie i ujawnia nieznajomemu szczegóły dotyczące serwera. Efekt uboczny jest po Twojej stronie: poprawnie skonfiguruj sklep, a i tak nie zobaczysz niczego przydatnego.

Błędy ukryte przed odwiedzającymi nie pozostawiają nic do przeczytania

Zamiast wiadomości spodziewaj się czegoś takiego:

Całkowicie pusta, biała strona, w przeglądarce nic się nie dzieje

Strona błędu HTTP 500

Połowa strony: góra się ładuje, a potem zatrzymuje się, a układ jest uszkodzony

Eksporty, które są pobierane i otwierane prawidłowo, ale brakuje wierszy na końcu

Produkty, które ładują się bez problemu i nigdy nie wyświetlają miniaturki

Klasycznym i najmniej pomocnym rozwiązaniem jest pusta strona: nie ma na niej nic do czytania, nic do wklejenia w pole wyszukiwania.

6.0 Upewnienie się, że to faktycznie pamięć

Potwierdź diagnozę, zanim ktokolwiek zmieni ustawienia. Patrząc z zewnątrz, te dwa problemy wyglądają identycznie, tylko jeden dotyczy pamięci, a ich rozwiązania nie mają ze sobą nic wspólnego.

Błąd mówiProblemem jestNaprawa polega na
Dozwolony rozmiar pamięci… wyczerpanyLimit pamięci PHPlimit_pamięci, omówiony poniżej
Maksymalny czas wykonania … przekroczonyOgraniczenie czasu, nie pamięćmax_execution_time

W obu przypadkach ta sama pusta strona. Poproś swojego hosta o dziennik błędów PHP z datą wystąpienia, ponieważ to właśnie tam trafia prawdziwy komunikat, gdy nic się nie wyświetla. Jedno żądanie i oszczędza sporo zgadywania.

7.0 Jak sprawdzić limit pamięci PHP w PrestaShop

Aktualny limit pamięci PHP można sprawdzić w zapleczu PrestaShop. Nie wymaga to dostępu do serwera.

Przejdź do sekcji Parametry zaawansowane , a następnie Informacje , gdzie znajdują się ustawienia PHP, w tym limit pamięci. Limit pamięci dotyczy zarówno sklepu, jak i panelu administracyjnego. To właśnie to ustawienie możemy sprawdzić w pierwszej kolejności.

Warto rozwiać pewne wątpliwości. Kanały i importy zazwyczaj działają w nocy według harmonogramu, a te zadania często odpowiadają innym ustawieniom pamięci niż Twoja strona internetowa. Odczytujesz prawidłowy wynik w zapleczu; import i tak się nie powiedzie. Ten sam serwer, druga konfiguracja. Wspomnij o tym swojemu dostawcy hostingu.

8.0 Jak zwiększyć limit pamięci PHP w PrestaShop i naprawić błędy wyczerpania pamięci

Wymagania systemowe PrestaShop określają minimalną ilość miejsca równą 256 MB, a instalator sprawdza to przed zezwoleniem na kontynuację.

Istnieje kilka sposobów na zwiększenie limitu pamięci PHP w ustawieniach PrestaShop. To, który z nich jest odpowiedni, zależy od konstrukcji Twojego hostingu, a tego nie da się ustalić, klikając po sklepie. Zapytaj lub sprawdź.

8.1 Najprostsza droga: zapytaj swojego gospodarza

Na hostingu współdzielonym to zazwyczaj wystarcza. Wiele paneli sterowania udostępnia ekran ustawień PHP, który można zmienić samodzielnie; jeśli to się nie uda, zrobi to dział wsparcia. Sformułuj to tak:

Czy mógłbyś zwiększyć limit pamięci (memory_limit) dla mojej witryny do 256M?
PrestaShop potrzebuje co najmniej 256 MB.

Jeśli host odmawia, to musimy poszukać innych opcji hostingu.

8.2 Jeśli Ty lub Twój programista macie dostęp do serwera

Wystarczy jeden krótki wiersz w pliku o nazwie php.ini:

memory_limit = 256M

Dwa problemy zdarzają się tu na tyle często, że warto o tym wspomnieć. Serwer przechowuje kilka plików php.ini i odczytuje tylko jeden, więc idealnie poprawna edycja może trafić do pliku, którego nikt nie sprawdza. Drugim problemem jest restart: w wielu konfiguracjach nic nie działa, dopóki PHP nie zostanie zrestartowane.

8.4 Metoda .htaccess i dlaczego często nic nie robi

Wyszukaj w Internecie, a zostaniesz poproszony o dodanie wiersza do .htaccess, pliku konfiguracyjnego w folderze głównym sklepu:

php_value memory_limit 256M

Czasami działa. Na większości nowoczesnych hostingów nic się nie dzieje, a na niektórych cała witryna zwraca błąd 500, ponieważ serwer odrzuca tę instrukcję. 

Spróbuj tego rozwiązania tylko w ostateczności i tylko wtedy, gdy będziesz mógł łatwo cofnąć zmianę.

Jest jeden haczyk charakterystyczny dla tej platformy: zapisanie ustawień adresu URL powoduje, że PrestaShop przepisuje plik .htaccess, więc ręcznie dodany wiersz może zniknąć bez ostrzeżenia. Sprawdź plik ponownie po dotknięciu SEO i adresów URL.

9.0 Sprawdzenie, czy zmiana faktycznie zadziałała

Nie wierz nikomu na słowo, w tym sobie. Potwierdzenie zajmie około dwóch minut:

Wróćmy do Parametrów Zaawansowanych, a następnie do Informacji. Czy liczba się zmieniła? Nadal 128 MB oznacza, że ​​edycja nigdy nie została wprowadzona, co jest zdecydowanie najczęstszym wynikiem.

Powtórz to, co wcześniej zawodziło. Jeśli ustawienie wskazuje 256 MB, a strona nadal się psuje, coś innego je nadpisuje.

Wyczyść pamięć podręczną sklepu w Parametrach zaawansowanych, a następnie w Wydajność.

Poczekaj kilka dni zanim uznasz, że problem został rozwiązany, ponieważ zazwyczaj wszystko, co zostanie zwrócone, będzie odpowiadało twojemu katalogowi.

Jeśli numer nie chce się ruszyć, należy najpierw podejrzewać, że przyczyną jest zły plik, a następnie panel sterowania zapisujący własną konfigurację nad zmianami zapisanymi na dysku.

9.2 Kiedy podniesienie limitu jest błędną odpowiedzią

Często jest to właściwa odpowiedź, ponieważ 128 MB to naprawdę za mało dla nowoczesnego zaplecza PrestaShop. Przejdź na 256 MB bez zamartwiania się.

Powyżej 512 MB zacznij zadawać inne pytanie. Zazwyczaj coś zużywa wtedy pamięć proporcjonalnie do Twojego katalogu, więc każde zwiększenie pojemności oznacza zakup kilku tysięcy produktów, zanim ta sama awaria powróci. Godzina pracy programisty kosztuje mniej niż większy serwer rocznie.

Sposób, w jaki problem się rozpoczął, może pomóc w ustaleniu, z jaką sytuacją mamy do czynienia. Coś, co pojawiło się wraz z rozrastaniem się katalogu, to problem z kodem lub danymi, noszący kostium pamięci. Coś, co zaczęło się w dniu, w którym wprowadzono moduł, należy do tego modułu. A problem, który zawsze występował, w sklepie o pojemności 128 MB, to po prostu ustawienie.

Ostateczny wniosek – zapobiegaj ponownemu wystąpieniu takiej sytuacji

  • Dojdź do 256 MB i tam pozostań. To udokumentowane minimum, a nie luksus.
  • Zmień rozmiar dużych zdjęć przed ich publikacją: pamięć jest zużywana na piksel, a szerokość 2000 pasuje do większości sklepów
  • Wyłączenie nie oznacza tego samego, co usunięcie, dlatego odinstaluj to, czego już nie używasz
  • Zaplanuj duże importy poza godzinami największego ruchu
  • Przećwicz duży import na kopii testowej, nigdy w sklepie w trakcie sprzedaży
  • Poproś programistę o przeczytanie dziennika błędów po niepowodzeniu operacji zbiorczej, zamiast zakładać, że operacja zadziałała
  • To ostatnie zasługuje na swoje miejsce. Operacja masowa, która zakończyła się w połowie, jest gorsza od takiej, która zakończyła się całkowitą porażką, ponieważ nie wiadomo, która połowa została wykonana, a odczytanie logu zajmuje minutę.

To był kompletny przewodnik po identyfikacji problemów z limitem pamięci PHP w PrestaShop. W Knowband specjalizujemy się we wtyczkach eCommerce, personalizacji stron internetowych i tworzeniu aplikacji, aby Twój sklep działał optymalnie. Potrzebujesz pomocy eksperta? Skontaktuj się z nami pod adresem [email protected] lub z pomocą techniczną Knowband – zawsze chętnie pomożemy.

Dodaj komentarz