2016-06-13 14 views
-2

Kürzlich hat meine App fatale Fehler bezüglich der Erschöpfung des maximal erlaubten Speichers geworfen. Nach einigen Nachforschungen fand ich heraus, dass das Limit in der .htaccess Datei gesetzt ist und es auf 64m setzt.Nachteile der Erhöhung des PHP-Speicherlimits

Die versuchte Zuweisung ist von ca. 80MB, und wir können diese Ressourcen bereitstellen, aber ich wollte die Community fragen, ob die Erhöhung des Wertes dieser Variable eine gute Lösung für das Problem ist. Vielen Dank

Antwort

1

Die Antwort hängt davon ab, was Ihr Skript tut :) Es klingt wie der Anstieg in Ihrem Fall war ziemlich klein (von 64 bis 80 MB, ich würde empfehlen, die Befugnisse von zwei obwohl und es auf 128MB btw.), so sollte es für moderne Maschinen keinen großen Unterschied machen. Aber um zu wissen, ob es das Richtige ist, müssen Sie herausfinden, warum Sie mehr Speicher benötigen.

Wenn Ihre Verarbeitung einfach mehr Speicher benötigt (z. B. wenn Sie hochgeladene Dateien im Speicher verarbeiten oder große json- oder xml-Strukturen dekodieren oder etwas anderes machen, das speicherintensiv ist), ist die Erhöhung Ihres Limits in Ordnung und üblich.

Wenn Ihre Anwendung jedoch Speicherlecks aufweist oder auf eine ineffiziente Art und Weise geschrieben wurde, maskiert das Erhöhen des Speicherlimits nur das Problem und löst es nicht. Sie werden wahrscheinlich immer wieder auf dieses Problem stoßen und die Speicherkapazität ständig erhöhen, was nicht machbar ist.

Wenn Sie nicht wissen, was den plötzlichen Anstieg des Speicherverbrauchs verursacht hat, würde ich empfehlen, Ihre Anwendung mit z. xhprof. Sie können sich auch die letzten Änderungen an Ihrer App ansehen und sehen, was sie möglicherweise verursacht hat. Wenn Sie es rechtfertigen können, geben Sie Ihrem Skript mehr Speicher, andernfalls versuchen Sie zuerst, Ihren Code zu optimieren.

+0

Die Speichergrenze sogar einen höheren Wert gesetzt werden konnte. 256-512 MB sind nicht ungewöhnlich. Aber für den Rest hat Kat absolut recht; stellen Sie sicher, dass Sie es rechtfertigen können. – giorgio

+0

Vielen Dank, sehr hilfreich – user69153

1

PHP wird normalerweise so bereitgestellt, dass ein PHP-Prozess mehrere Anfragen nacheinander abarbeitet. Während einer einzelnen Anfrage kann ein Skript nun Speicher reservieren. Am Ende wird diese Erinnerung frei sein. So weit, ist es gut. Jetzt sind die meisten Betriebssysteme so aufgebaut, dass der Speicher, der einem Prozess zugewiesen wurde, auch dann frei bleibt, wenn er freigegeben wird. Die Annahme besteht darin, dass ein Programm, das einmal Speicher benötigt, den Betrag erneut benötigt und es billiger ist, es für den Prozess verfügbar zu halten, als es zurückzunehmen. So kann es bei einer PHP-Implementierung vorkommen, dass eine Anfrage sehr viel Speicher beansprucht und der Speicher dann an den Prozess gebunden ist und nicht mehr für das System verfügbar ist. Außerdem ist es ein möglicher Hinweis auf einen Fehler, wenn ein Prozess viel mehr Speicher beansprucht als erwartet. Für diese beiden Dinge dient die memory_limit als Sicherheitsnetz.

Wenn Ihre Anwendung mehr Arbeitsspeicher benötigt, ist es in der Regel in Ordnung, das Limit zu erhöhen. Der absolute Höchstwert ist abhängig vom System (available RAM/number of worker processes könnte eine grobe Formel sein, grob wie es anderen Speicher nicht benötigt) Normalerweise sollten Sie nur um einen benötigten Betrag erhöhen.

Natürlich, wenn Sie dies ändern, müssen Sie daran denken, wenn Sie zu anderen Systemen wechseln. In der Regel bedeutet eine geringere Speicherbelegung auch eine schnellere Ausführung. Daher sollten Sie versuchen, zu überprüfen, ob Sie Ihren Code optimieren können.


Randbemerkung: Ich habe das Speichermodell oben absichtlich vereinfacht, virtuelle Speicherseiten zu ignorieren und wie Betriebssysteme optimieren dort

Verwandte Themen