Napraw „Limit pamięci PHP poniżej zalecanej wartości” w ownCloud 10

Oczekiwany rezultat to nie tylko „zniknięcie ostrzeżenia”. Prawidłowe rozwiązanie oznacza, że ​​proces PHP obsługujący ownCloud 10 zgłasza limit pamięci wynoszący co najmniej 512 MB, ostrzeżenie administratora ownCloud znika, zadania zaplanowane lub CLI również używają odpowiedniego limitu, a host nadal ma wystarczająco dużo pamięci fizycznej do uruchamiania PHP, serwera WWW, bazy danych i zadań w tle bez konieczności intensywnego przełączania.

W przypadku ownCloud Classic 10.16 oficjalne środowisko Dockera OWNCLOUD_MEMORY_LIMIT=512Mjest zalecane domyślnie. Dokumentacja ownCloud rozróżnia również konfigurację PHP używaną przez serwer WWW od tej używanej przez php-cli. To rozróżnienie jest głównym powodem, dla którego administratorzy czasami zmieniają memory_limit, restartują usługę i nadal widzą to samo ostrzeżenie.

Ten przewodnik rozpoczyna się od najmniej uciążliwych kontroli, a następnie przedstawia ścieżki Apache, PHP-FPM, CLI i Dockera. Wyjaśnia również, kiedy dalsze zwiększanie limitu jest uzasadnione, a kiedy prawdziwym problemem jest niewystarczająca ilość pamięci RAM hosta, a nie samo ustawienie PHP.

Jak wygląda sukces

SprawdzaćDobry wynikJeśli się nie uda
przegląd administratora ownCloudBrak ostrzeżenia „Limit pamięci PHP poniżej zalecanej wartości”Prawdopodobnie zmieniłeś konfigurację PHP lub nie uruchomiłeś ponownie właściwej usługi.
Środowisko wykonawcze PHP w sieci Webmemory_limitpokazuje 512M lub więcejZnajdź załadowany plik konfiguracyjny używany przez żądanie sieciowe.
CLI / środowisko wykonawcze cronphp -r 'echo ini_get("memory_limit");'pokazuje zamierzoną wartośćphp.iniEdytuj również elementy specyficzne dla CLI .
Pamięć hostaWystarczająca ilość dostępnej pamięci RAM; niewielkie lub żadne stałe obciążenie pamięcią wymianyNie zwiększaj limitów PHP bezmyślnie. Sprawdź ponownie liczbę pracowników PHP lub rozmiar hosta.
DziennikiBrak powtarzających się błędów „Wyczerpany dozwolony rozmiar pamięci”Przed ponownym zwiększeniem limitu znajdź obciążenie zużywające pamięć.

1. Potwierdź ostrzeżenie i wartość, którą widzi ownCloud

Przegląd administratora ownCloud 10 wyświetlający ostrzeżenie, że limit pamięci PHP jest niższy niż zalecana wartość i wynosi 128 MB
Zacznij od wartości widocznej dla samego ownCloud. Limit 128 MB lub 256 MB dla środowiska uruchomieniowego jest niższy niż wartość 512 MB używana w zalecanej przez ownCloud konfiguracji Dockera.

Otwórz ustawienia administracyjne ownCloud i zanotuj ostrzeżenie o limicie pamięci. Przed wprowadzeniem jakichkolwiek zmian zanotuj wersję ownCloud, wersję PHP, typ serwera WWW i aktualny limit pamięci. To da Ci punkt odniesienia i pomoże uniknąć zmiany niewłaściwej instalacji PHP w systemach z wieloma wersjami PHP.

W aktualnej dokumentacji ownCloud 10.16 podano, że wymagania serwera w dużym stopniu zależą od liczby użytkowników, plików i aktywności. Konfiguracja Dockera OWNCLOUD_MEMORY_LIMIT=512Mzaleca zachowanie tej wartości domyślnej. To sprawia, że ​​512 MB to rozsądna wartość bazowa dla rozwiązania problemu, ale nie gwarantuje, że każde obciążenie zmieści się w 512 MB.

Oficjalne odniesienia: zalecenia dotyczące wdrożenia ownCloud i zmienne środowiskowe ownCloud Docker .

2. Nie ufaj wartości CLI jako reprezentacji serwera WWW

Terminal Ubuntu pokazujący php -i i php --ini z limitem pamięci CLI wynoszącym 128 MB i ścieżką CLI php.ini
php --iniRaportuje konfigurację interfejsu PHP CLI. Może ona różnić się od konfiguracji PHP używanej przez Apache lub PHP-FPM do obsługi ownCloud.

Uruchom poniższe polecenia, aby zobaczyć, do czego służy proces PHP w wierszu poleceń:

php --ini
php -r 'echo ini_get("memory_limit"), PHP_EOL;'

Jest to przydatne w przypadku occzadań cron, ale nie stanowi dowodu na to, do czego służy żądanie sieciowe. ownCloud wyraźnie dokumentuje oddzielne ścieżki konfiguracji, takie jak:

/etc/php/<version>/apache2/php.ini
/etc/php/<version>/fpm/php.ini
/etc/php/<version>/cli/php.ini

Jeżeli interfejs CLI wyświetla komunikat 512M, a strona administratora nadal wyświetla komunikat o błędzie, ta niezgodność jest wyraźnym sygnałem, że serwer WWW ładuje inny plik php.ini.

Zobacz notatki dotyczące konfiguracji PHP ownCloud , które ostrzegają, że ustawienia PHP mogą wymagać zmiany w więcej niż jednym pliku INI.

3. Znajdź konfigurację PHP używaną przez żądanie sieciowe

Strona phpinfo przeglądarki pokazująca załadowany plik konfiguracyjny PHP-FPM i limit pamięci 128 MB obok terminala pokazującego konfigurację CLI
Porównaj środowisko wykonawcze PHP przeglądarki z środowiskiem wykonawczym CLI. Plik konfiguracyjny załadowany w przeglądarce to plik, który ma znaczenie dla ostrzeżenia internetowego ownCloud.

Najbardziej wiarygodnym testem jest sprawdzenie kodu PHP z tego samego stosu internetowego, który obsługuje ownCloud. Dokumentacja ownCloud opisuje użycie phpinfo.phpstrony tymczasowej:

<?php phpinfo(); ?>

Umieść go tymczasowo w katalogu głównym witryny, otwórz w przeglądarce i znajdź:

  • Załadowany plik konfiguracyjny
  • limit_pamięci
  • API serwera

Następnie natychmiast usuń plik phpinfo . ownCloud ostrzega, że ​​pozostawienie publicznej strony phpinfo ujawnia poufne informacje serwera.

Jeżeli przeglądarka wyświetla komunikat , /etc/php/7.4/fpm/php.inigdy php --iniwyświetla komunikat /etc/php/7.4/cli/php.ini, teraz już wiesz dokładnie, dlaczego edycja pliku CLI nie spowodowała usunięcia ostrzeżenia.

4. PHP-FPM: podnieś limit czasu wykonania w sieci do 512 MB

Edytor Nano otwarty w pliku PHP-FPM php.ini z limitem pamięci ustawionym na 512M
W przypadku konfiguracji Nginx lub Apache przy użyciu PHP-FPM należy zmienić FPM php.inilub odpowiednie zastąpienie puli/strony, a nie tylko plik CLI.

W przypadku typowej instalacji Debiana lub Ubuntu:

sudo nano /etc/php/7.4/fpm/php.ini

Znajdować:

memory_limit = 128M

i zmień na:

memory_limit = 512M

Użyj zainstalowanej wersji PHP w ścieżce. Następnie uruchom ponownie odpowiednią usługę FPM i serwer WWW, jeśli to konieczne:

sudo systemctl restart php7.4-fpm
sudo systemctl reload nginx

W przypadku Apache'a z proxy_fcgiinną konfiguracją FPM należy zrestartować PHP-FPM i ponownie załadować Apache'a.

ownCloud zauważa również, że PHP-FPM nie pobiera ustawień PHP z .htaccess. Jeśli korzystasz z nadpisywania dla poszczególnych katalogów w FPM, użyj obsługiwanego mechanizmu konfiguracji PHP/FPM dla swojego środowiska, takiego jak odpowiednia php.inikonfiguracja puli lub .user.ini.

5. Apache z mod_php: edytuj konfigurację Apache PHP

Edytor Nano pokazujący limit pamięci ustawiony na 512 MB w pliku Apache php.ini, po którym następuje polecenie ponownego uruchomienia Apache
Używając modułu Apache mod_php, edytuj konfigurację PHP specyficzną dla Apache i ponownie uruchom Apache, aby nowe procesy robocze załadowały nowy limit.

Jeśli Apache ładuje PHP bezpośrednio jako moduł, edytuj plik specyficzny dla Apache:

sudo nano /etc/php/7.4/apache2/php.ini

Ustawić:

memory_limit = 512M

Następnie uruchom ponownie Apache'a:

sudo systemctl restart apache2

Nie kopiuj numeru wersji mechanicznie. Sprawdź wersję faktycznie załadowaną przez Apache. Systemy aktualizowane w ramach kilku wydań PHP często zachowują wiele katalogów w /etc/php/.

Kryterium wyniku jest proste: po restarcie środowisko uruchomieniowe PHP w przeglądarce musi wyświetlić nową wartość. Jeśli nadal wyświetla 128 MB, inna warstwa konfiguracji nadpisuje edycję.

6. Zaktualizuj limit CLI, gdy occ lub cron używa zbyt mało pamięci

Ostrzeżenie administratora jest generowane przez środowisko uruchomieniowe witryny internetowej, ale occzadania cron korzystają z interfejsu wiersza poleceń PHP. Dokumentacja ownCloud wyraźnie o tym wspomina.

Redagować:

sudo nano /etc/php/7.4/cli/php.ini

Ustawić:

memory_limit = 512M

Następnie sprawdź:

php -r 'echo ini_get("memory_limit"), PHP_EOL;'

Nie musisz restartować usługi dla PHP w interfejsie CLI, ponieważ każde wywołanie CLI uruchamia nowy proces. Jeśli jednak zadanie cron jawnie wywołuje inny plik binarny PHP, zweryfikuj ten konkretny plik, zamiast zakładać, że /usr/bin/phpjest to ten używany.

Firma ownCloud zaleca korzystanie occz konta HTTP, zazwyczaj www-dataw systemach Debian/Ubuntu. Oficjalna dokumentacja OCC ostrzega również, że occw przypadku instalacji wielu wersji PHP należy używać tej samej wersji PHP, co serwer WWW.

7. Docker: użyj OWNCLOUD_MEMORY_LIMIT zamiast edytować pliki w kontenerze

Plik Docker Compose pokazujący, że OWNCLOUD_MEMORY_LIMIT jest ustawiony na 512M, a kontener ownCloud jest tworzony ponownie
W przypadku oficjalnego kontenera ownCloud należy skonfigurować OWNCLOUD_MEMORY_LIMIT=512Mśrodowisko kontenera i ponownie utworzyć usługę, aby zaktualizować wygenerowaną konfigurację PHP.

W przypadku oficjalnego obrazu ownCloud Docker należy użyć udokumentowanej zmiennej środowiskowej:

environment:
  OWNCLOUD_MEMORY_LIMIT: 512M

Następnie utwórz usługę ponownie:

docker compose up -d

Nie wprowadzaj pierwotnej poprawki, edytując php.iniwewnątrz tymczasowego kontenera. Odtworzenie kontenera może spowodować utratę tych zmian. Oficjalna dokumentacja środowiska ownCloud Docker definiuje OWNCLOUD_MEMORY_LIMIT=512Mtę domyślną opcję i zaleca jej zachowanie.

Jeśli host Docker ma ściśle określony limit pamięci, sprawdź także ograniczenia kontenera:

docker stats

Limit PHP wynoszący 512 MB nie daje magicznie kontenerowi 512 MB wolnej pamięci; pozwala on na wykorzystanie tylko tej ilości przez pojedyncze żądanie PHP. Kontener i host nadal potrzebują wystarczającej ilości pamięci dla wszystkich równoczesnych procesów PHP i innych usług.

8. Uruchom ponownie odpowiednią usługę i zweryfikuj ją w tym samym środowisku wykonawczym

Ponowne uruchomienie terminala PHP-FPM i Nginx oraz przegląd ownCloud pokazujący limit pamięci PHP na poziomie 512 MB z pomyślnie zaliczonymi sprawdzeniami
Naprawa zostanie wykonana dopiero wtedy, gdy środowisko uruchomieniowe sieci Web zgłosi 512 MB lub więcej, a ownCloud nie będzie już wyświetlał ostrzeżenia o małej ilości pamięci.

Po ponownym uruchomieniu odpowiedniej usługi sprawdź ponownie tymczasową stronę phpinfo lub podgląd administratora ownCloud. Następnie usuń stronę phpinfo.

Jeżeli zmieniłeś PHP-FPM, sprawdź:

sudo systemctl status php7.4-fpm
sudo systemctl status nginx

Jeśli zmieniłeś Apache:

sudo systemctl status apache2

Odśwież stronę administratora ownCloud. Ostrzeżenie powinno zniknąć, jeśli ownCloud działa teraz z co najmniej oczekiwanym limitem.

9. Sprawdź pamięć RAM hosta przed zwiększeniem limitu PHP powyżej 512 MB

Terminal Ubuntu pokazujący wolną pamięć, procesy robocze PHP-FPM i ostatnie wpisy w dzienniku ownCloud
Po podniesieniu limitu na żądanie sprawdź całkowitą pamięć systemową i zachowanie procesu roboczego PHP. Wyższy limit PHP może w najgorszym przypadku zwiększyć zużycie pamięci RAM, gdy aktywnych jest wielu pracowników.

Uruchomić:

free -h
ps aux | grep php-fpm
vmstat 1

PHP memory_limitto limit narzucony na skrypt. Nie jest to rezerwacja i nie jest tożsama z ilością pamięci RAM potrzebną serwerowi. Jeśli masz 20 pracowników PHP i każdemu żądaniu dajesz uprawnienia do użycia bardzo dużej ilości pamięci, teoretycznie najgorszy scenariusz może znacznie przekroczyć dostępną pamięć RAM maszyny.

Dokumentacja dotycząca dostrajania ownCloud zawiera to samo ogólne ostrzeżenie dla procesów serwera WWW: należy dostosować liczbę procesów tak, aby łączne wykorzystanie pamięci RAM pozostawało poniżej dostępnej pamięci RAM, w przeciwnym razie system zacznie korzystać z funkcji wymiany i spadnie wydajność. Zobacz wskazówki dotyczące dostrajania ownCloud Classic .

Jeśli ostrzeżenie 512M zniknęło, a normalne operacje przebiegają prawidłowo, nie ma powodu, aby zwiększać limit tylko po to, by liczba była większa.

10. Gdy 512M nadal wyświetla komunikat „Dozwolony rozmiar pamięci został wyczerpany”

Ostrzeżenie o wyczyszczonych zaleceniach i awaria z powodu wyczerpania pamięci to różne problemy. Jeśli logi zawierają komunikaty takie jak:

PHP Fatal error: Allowed memory size of ... bytes exhausted

Zidentyfikuj operację, która ją uruchamia. Duże skanowanie, zadania szyfrowania, operacje na pamięci zewnętrznej, przetwarzanie obrazu czy aplikacja innej firmy mogą mieć bardzo różne profile pamięci.

Sprawdź logi ownCloud i logi błędów PHP/serwera WWW. Standardowa instalacja ownCloud zapisuje własne logi w skonfigurowanym katalogu danych, zazwyczaj data/owncloud.log. Unikaj traktowania „zwiększ do 1 GB” jako automatycznego kolejnego kroku. Najpierw sprawdź, czy ta sama operacja wielokrotnie osiąga limit.

Jeśli jedno znane zadanie administracyjne faktycznie wymaga więcej pamięci, ukierunkowane obejście CLI może być bezpieczniejsze niż globalne nadawanie każdemu żądaniu internetowemu ogromnego limitu:

php -d memory_limit=1G occ <command>

Używaj tego tylko wtedy, gdy rozumiesz działanie polecenia i pamięci. Nie naprawia to żądania internetowego realizowanego przez PHP-FPM lub Apache.

Dlaczego ostrzeżenie może pozostać po edycji pliku php.ini

ObjawPrawdopodobna przyczynaNastępne sprawdzenie
php -rpokazuje 512M, ownCloud nadal pokazuje 128MZmieniłeś tylko CLI PHPSprawdź phpinfo przeglądarki i jej załadowany plik konfiguracyjny.
Plik FPM wskazuje 512M, przeglądarka nadal pokazuje 128MPlik Pool, .user.ini, lub inny plik INI go zastępujeSprawdź wartości „local” i „master” phpinfo oraz dodatkowe przeanalizowane pliki INI.
Wartość zmienia się dopiero po ponownym uruchomieniuNie uruchomiono ponownie poprawnej usługiPo edycji należy jawnie zrestartować PHP-FPM lub Apache.
Wartość Dockera powraca do starego ustawienia po ponownym utworzeniuEdytowałeś wewnątrz konteneraUstaw OWNCLOUD_MEMORY_LIMITw Compose lub środowisku wdrożeniowym.
Ostrzeżenie znika, ale serwer rozpoczyna zamianęWspółbieżność PHP przekracza pamięć hostaZmniejsz liczbę pracowników, zoptymalizuj obciążenie pracą lub dodaj pamięć RAM.

Nie należy mylić limitu pamięci z limitami przesyłania

memory_limit, upload_max_filesizei post_max_sizerozwiązywać różne problemy. Zwiększenie pamięci PHP nie pozwala automatycznie użytkownikom na przesyłanie większych plików. W oddzielnych notatkach konfiguracyjnych ownCloud 10.16 podano, że post_max_sizenależy skonfigurować co najmniej 512 MB, aby spełnić udokumentowane minimum, i wyjaśniono, że limity przesyłania wymagają osobnych ustawień.

Jeśli rzeczywistym objawem jest „niepowodzenie przesyłania dużych plików”, sprawdź upload_max_filesizelimity post_max_sizerozmiaru ciała serwera proxy/serwera WWW, limity czasu i pojemność dysków tymczasowych. Nie używaj wyższych wartości memory_limitjako zamiennika tych ustawień.

Ostateczna lista kontrolna

  • Potwierdź ostrzeżenie i bieżącą wartość w ownCloud.
  • Określ, czy ownCloud używa Apache mod_php czy PHP-FPM.
  • Znajdź załadowany plik konfiguracyjny środowiska uruchomieniowego sieci Web .
  • Ustaw web PHP memory_limitna co najmniej 512M.
  • Zaktualizuj również CLI PHP, jeżeli occcron używa dolnego limitu.
  • W przypadku platformy Docker należy ustawić ją OWNCLOUD_MEMORY_LIMIT=512Mw środowisku wdrożeniowym.
  • Uruchom ponownie lub utwórz ponownie usługę, która faktycznie obsługuje PHP.
  • Sprawdź wartość z poziomu środowiska uruchomieniowego sieci Web, a nie tylko CLI.
  • Sprawdź, czy ostrzeżenie ownCloud zniknęło.
  • Przed zwiększeniem limitu powyżej 512 MB należy monitorować pamięć RAM i wymianę hosta.

Podsumowanie

Rozwiązaniem problemu „Limit pamięci PHP poniżej zalecanej wartości” w ownCloud 10 jest ustawienie w środowisku wykonawczym PHP, które faktycznie obsługuje ownCloud, limitu 512 MB lub wyższego, a następnie zweryfikowanie wyniku w tym samym środowisku wykonawczym. Najczęstszym błędem jest edycja, /etc/php/.../cli/php.inigdy ownCloud działa przez PHP-FPM lub Apache z innym plikiem konfiguracyjnym.

Zatrzymaj się, gdy ostrzeżenie zniknie, rutynowe operacje będą działać prawidłowo, a host będzie miał odpowiedni zapas pamięci. Jeśli PHP nadal wyczerpuje 512 MB podczas określonej operacji, przejdź od „zwiększania limitu” do diagnostyki obciążenia: sprawdź niedziałające polecenie, aplikacje, logi, współbieżność i fizyczną pamięć RAM. Wyższy limit może być odpowiedni, ale tylko wtedy, gdy obciążenie to uzasadnia, a serwer może go bezpiecznie obsłużyć.

Zostaw komentarz

10 najlepszych narzędzi do pingowania w celu znajdowania urządzeń w sieci

10 najlepszych narzędzi do pingowania w celu znajdowania urządzeń w sieci

Porównaj 10 narzędzi do pingowania, które umożliwiają szybkie wykrywanie sieci LAN, skanowanie międzyplatformowe i zarządzanie adresami IP. Dowiedz się, co narzędzie pingujące może Ci powiedzieć, a czego nie.

6 najlepszych narzędzi do zarządzania siecią, umożliwiających śledzenie wydajności

6 najlepszych narzędzi do zarządzania siecią, umożliwiających śledzenie wydajności

Porównaj sześć narzędzi do zarządzania siecią służących do monitorowania wydajności, obejmujących zasięg SNMP, mapowanie, alerty, modele wdrażania i kompromisy kosztów.

Ping Monitor: 7 darmowych i otwartych narzędzi do monitorowania dostępności sieci

Ping Monitor: 7 darmowych i otwartych narzędzi do monitorowania dostępności sieci

Porównaj siedem darmowych i otwartych monitorów pingów — od kompletnych pakietów sieciowych po ukierunkowane sondy opóźnień — i wybierz odpowiedni monitor pod kątem dostępności, utraty pakietów i historii.

QoS w sieciach: czym jest jakość usług i jak działa

QoS w sieciach: czym jest jakość usług i jak działa

Dowiedz się, co oznacza QoS w sieciach, w jaki sposób oznaczenia DSCP i kolejki ruchu nadają priorytet aplikacjom głosowym, wideo i biznesowym oraz czego QoS nie jest w stanie naprawić.

Najlepsze oprogramowanie serwera SFTP do bezpiecznego przesyłania plików

Najlepsze oprogramowanie serwera SFTP do bezpiecznego przesyłania plików

Porównaj niezawodne oprogramowanie serwera SFTP dla systemów Windows i Linux, w tym OpenSSH, Bitvise, SolarWinds i SFTPGo. Znajdź rozwiązanie odpowiednie dla swoich potrzeb w zakresie bezpieczeństwa i transferu plików.

7 najlepszych narzędzi do zarządzania adresami IP dla zespołów sieciowych

7 najlepszych narzędzi do zarządzania adresami IP dla zespołów sieciowych

Porównaj siedem narzędzi do zarządzania adresami IP służących do wykrywania podsieci, koordynacji DNS i DHCP, inwentaryzacji sieci i otwartego oprogramowania IPAM.

6 najlepszych narzędzi do monitorowania serwerów Windows Server zapewniających lepszą dostępność i wydajność

6 najlepszych narzędzi do monitorowania serwerów Windows Server zapewniających lepszą dostępność i wydajność

Porównaj sześć narzędzi do monitorowania systemu Windows Server pod kątem zbierania danych systemu Windows, widoczności aplikacji, modelu wdrażania i licencjonowania, aby znaleźć odpowiednie rozwiązanie.

10 najlepszych narzędzi do skanowania sieci w celu wykrywania urządzeń i adresów IP

10 najlepszych narzędzi do skanowania sieci w celu wykrywania urządzeń i adresów IP

Porównaj narzędzia do skanowania sieciowego umożliwiające szybkie wykrywanie urządzeń, skanowanie adresów IP na wielu platformach oraz zarządzanie IPAM w przedsiębiorstwie. Znajdziesz tu wskazówki dotyczące dopasowania każdej opcji do swojej sieci.

Najlepsze praktyki monitorowania sieci: co śledzić i jakich narzędzi używać

Najlepsze praktyki monitorowania sieci: co śledzić i jakich narzędzi używać

Zbuduj praktyczny monitoring sieci z przejrzystym zakresem urządzeń, przydatnymi wskaźnikami wydajności, przydatnymi alertami oraz porównaniem SolarWinds NPM, PRTG i OpManager.

Jak używać Nmap do śledzenia trasy i odczytywania ścieżki sieciowej

Jak używać Nmap do śledzenia trasy i odczytywania ścieżki sieciowej

Użyj opcji --traceroute programu Nmap, aby mapować przeskoki do autoryzowanego hosta, zrozumieć dane wyjściowe dotyczące przeskoków i czasu RTT oraz rozwiązywać problemy z brakującymi odpowiedziami bez nadmiernego skanowania.