Właśnie odziedziczyłem stronę ze skryptem PHP, który stale kończy się z pamięci na 117 MB. Dzieje się tak nawet wtedy, gdy zwiększam zmienną memory_limit PHP do 312 MB, co robię przez php.ini.Błąd braku pamięci PHP, mimo że nie osiągnięto limitu pamięci
Zostało to teraz rozwiązane dzięki świetnej informacji z pcguru. Zobacz moją odpowiedź poniżej, który zaczyna się: I w końcu znalazłem odpowiedź
ini_get('memory_limit')
zwraca wartość ustawioną w php.ini, więc jestem pewien Apache został uruchomiony ponownie po zmianie wartości. Używam memory_get_usage(true)
, aby zwrócić pamięć zużywaną przez skrypt w różnych punktach po drodze. Konsekwentnie kończy się niepowodzeniem, gdy osiągnie 117 MB.
Czy jest jakiś wewnętrzny limit PHP, o którym nie mam pojęcia, czy nigdy nie przydzieli on więcej niż 117 MB do pojedynczego skryptu?
Serwer ma 1 GB pamięci RAM i działa w systemie CentOS. Mam dostęp do powłoki głównej. PHP jest w wersji 5.3.18. MySQL to wersja 5.1.66-cll.
Ten skrypt znajduje się za nazwą użytkownika/hasłem i nie mogę zapewnić publicznego dostępu do niego.
Edytowane do dodania:
1) Dzięki wszystkim za pomoc do tej pory. Więcej informacji znajdziesz w moich odpowiedziach na komentarze użytkowników w różnych odpowiedziach poniżej.
2) Suhosin zdecydowanie nie jest zainstalowany. Sprawdziłem wiele miejsc, w tym uruchomiłem skrypt i sprawdziłem stałe i uruchomiłem php -v
3) Dziennik apache nie ma zapisów konkretnego komunikatu o błędzie, który dostaję. Rejestrowanie jest włączone w php.ini. Przeszedłem przez grep, żeby przeszukać cały dziennik.
4) Czy w tym przypadku jest zgłaszany błąd?
Czym dokładnie jest błąd, który widzisz? Być może jesteś zdezorientowany przez "próbę przydzielenia xxx bajtów" –
Kudos za posiadanie aktualnej wersji PHP 5.3. –
Czy masz łatkę suhosin przez przypadek? – DaveRandom