2012-08-09 10 views
40

Mam problem z zwiększeniem limitu pamięci dla PHP jako modułu Apache.Jak zwiększyć limit pamięci dla PHP powyżej 2 GB?

jeśli mogę umieścić następujące dyrektywy w konfiguracji Apache, że praca OK:

php_value memory_limit 1.99G 

Ale ponad 2GB nie działają, to przywrócić tę wartość z powrotem do 128MB.

Na czym polega problem? Potrzebuję więcej pamięci dla niektórych zadań związanych z PDF.

Serwer to Debian 2.6.32-5-amd64 # 1 SMP, PHP 5.3.3-7 + squeeze13 z fizyczną pamięcią RAM 12 GB.

+7

2G procesów apache ! Łał. – Ray

+0

Może powinieneś pozostawić domyślną konfigurację Apache'a i 'ini_set ('memory_limit', -1);' tylko na pliku, którego potrzebujesz. Sprawdź, czy to działa. – JRomero

+0

Używanie MB zamiast GB nic nie zmienia. Sądzę, że jest jakiś inny limit może gdzieś w konfiguracji Apache. Ponadto, jak wiem, memory_limit nie może być zmieniony w czasie wykonywania, a domyślna wartość to 128 MB. Może mogę ustawić to w głównym php.ini, ale nie chcę, aby inne VHOST miały tak duże ustawienia, więc używam go na VHOST. – mikikg

Odpowiedz

32

Czy próbowałeś za pomocą wartości w MB?

php_value memory_limit 2048M 

Sponsorowane edycji tej wartości w php.ini nie Apache.

+1

tak, to musi być w php.ini. Z jakiegoś powodu nie pracuj nad 2G w konfiguracji apache (praca bez problemu innych niższych wartości). – mikikg

+0

cześć ... faktycznie używam Zend, tak jak włączyć pamięć Zend –

+0

Czy to znaczy, że praktycznie nie ma ograniczenia, ile pamięci PHP może zużywać, pod warunkiem, że masz wystarczającą ilość pamięci RAM? – dotslash

1

wejścia następujące do konfiguracji Apache:

php_value memory_limit 2048M 
3

Powinieneś mieć 64-bitowy system operacyjny na sprzęt obsługujący 64-bitowy system operacyjny, 64-bitową wersję Apache i taki sam dla PHP. Ale to nie gwarantuje, że funkcje, które działają z PDFem, mogą korzystać z tak dużych rozmiarów pamięci. Lepiej nie ładuj całego pliku do pamięci, podziel go na porcje lub użyj funkcji plików, aby wyszukać na nim bez ładowania do pamięci RAM.

+0

Jest już 64-bitowy: Linux myHOST 2.6.32-5-amd64 # 1 SMP Pon Oct 3 03:59:20 UTC 2011 x86_64 GNU/Linux – mikikg

+0

Co z Apache? – Timur

+0

Apache jest w wersji standardowej 2.2.16-6 + squeeze7 od Debiana. Myślę, że jest skompilowany w 64-bitach. – mikikg

26

Proponuję, abyś spojrzał na problem w niewłaściwym świetle. Pytanie powinno brzmieć "co ja robię, co wymaga pamięci 2G w procesie apache z Php za pośrednictwem modułu Apache i czy ten zestaw narzędzi najlepiej nadaje się do tej pracy?"

Tak, możesz zapiąć rakietę na brodę pinto, ale prawdopodobnie nie jest to właściwe rozwiązanie.

Bez względu na to, dostarczę rakietę, jeśli naprawdę jej potrzebujesz ... możesz dodać ją do początku skryptu.

ini_set('memory_limit','2048M'); 

Spowoduje to ustawienie tylko scenariusza. Będziesz nadal musiał powiedzieć Apache, aby zezwolił na tyle na skrypt php (myślę).

+1

Wiem, skrypt nie jest mój, jest to jakiś konwerter html2pdf i dane wejściowe do niego to bardzo duża strona HTML. – mikikg

+0

@mikikg zobacz powyższą odpowiedź – Ray

+0

Właściwe rozwiązanie i właściwe wyjaśnienie! Przekroczyłem limit pamięci dla tylko jednego skryptu, mojej mapy witryny, która indeksowała zbyt wiele stron (które były przechowywane w DB). Idealne rozwiązanie, mapa witryny ma wysoki limit pamięci, wszystko inne pozostaje nietknięte. – HoldOffHunger

12

Do limitu nieograniczony pamięci ustawione -1 w memory_limit zmiennej:

ini_set('memory_limit', '-1'); 
+1

Miło jest wiedzieć, że nieograniczona pamięć jest możliwa, ale nie sądzę, bym używał tego w moim kodzie wkrótce. =) – HoldOffHunger

Powiązane problemy