Heim  >  Artikel  >  Backend-Entwicklung  >  So begrenzen Sie die Speichernutzung des PHP-Prozesses mithilfe von „memory_limit“.

So begrenzen Sie die Speichernutzung des PHP-Prozesses mithilfe von „memory_limit“.

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-06-23 16:24:393662Durchsuche

Memory_limit im virtuellen Host PHP ist das maximal verfügbare Speicherlimit für eine einzelne Ausführung eines einzelnen PHP-Skripts. Das Standardlimit beträgt 256 MB und das Maximum kann auf 512 MB angepasst werden. Der folgende Editor stellt vor, wie Sie mit „memory_limit“ die Speichernutzung des PHP-Prozesses begrenzen.

So begrenzen Sie die Speichernutzung des PHP-Prozesses mithilfe von „memory_limit“.

memory_limit begrenzt, wie der Name schon sagt, die Speichernutzung des PHP-Prozesses. Beispiel: Die Systemanforderungen von

magento2 unterliegen Einschränkungen hinsichtlich des PHP-Speicherlimits, das nicht niedriger als 512 MB sein darf. (Der Standardwert ist 128 MB. Wenn er nicht geändert wird, wird die Hintergrundverarbeitungslogik von Magento nicht normal ausgeführt.)

Schauen Sie sich die Erklärung auf der offiziellen PHP-Website an

Damit wird die maximale Speichermenge in Bytes festgelegt, die ein Skript zulässt Damit wird die maximale Speichermenge in Bytes festgelegt, die ein Skript zuweisen darf. Damit wird verhindert, dass schlecht geschriebene Skripte den gesamten verfügbaren Speicher auf einem Server verbrauchen. Setzen Sie diese Anweisung auf -1.

Es ist zu beachten, dass das System umso weniger Anforderungen gleichzeitig verarbeiten kann, je höher der Wert von „memory_limit“, also dem von einem einzelnen PHP-Prozess belegten Speicher, ist. Wenn beispielsweise eine Maschine mit 2G Speicher

memory_limit auf 128 MB eingestellt ist, kann sie bis zu 16 Anfragen gleichzeitig verarbeiten. Wenn memory_limit auf 256 MB eingestellt ist, kann sie bis zu 8 Anfragen gleichzeitig verarbeiten auf 512 MB eingestellt ist, kann es bis zu 4 Anfragen gleichzeitig verarbeiten.

Ist der Wert von „memory_limit“, desto besser?

Natürlich nicht, Memory_Limit dient hauptsächlich dazu, zu verhindern, dass Programmfehler oder Endlosschleifen viel Speicher belegen und Systemausfälle verursachen. Bei der Einführung einer großen Anzahl von Plug-Ins oder Codes von Drittanbietern ist es unbedingt erforderlich, den Speicher zu begrenzen.

memory_limit bewirkt, dass jeder PHP-Prozess eine feste Menge an Speicher belegt?

Oder ist es nur die Obergrenze des zugewiesenen Speichers? Testen Sie die

-Idee, setzen Sie „memory_limit“ auf 10 MB, initialisieren Sie eine 2 MB/20 MB große Zeichenfolge in der PHP-Anfrage und sehen Sie sich die Speichernutzung im Systemprozess an.

Nginx-Konfiguration

server {
        listen 8093;
        root /home/zhongwei/work/test/memory_limit/;
        index index.php index.html index.htm;
        server_name localhost;
        location / {
                # try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.php?q=$uri&$args;
        }
        location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_param PHP_VALUE "memory_limit = 10M";
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }
}

PHP-Testdatei

<?php
$char_count = 2;
$M = 1024 * 1024;
echo sprintf("Current memory_limit value is: %s.", ini_get(&#39;memory_limit&#39;));
echo sprintf(&#39;<br/>Amount of memory allocated to PHP: %0.3fM.&#39;, memory_get_usage() / $M);
$s = str_repeat("a", $M * $char_count);
//sleep(30);
echo sprintf(&#39;<br/>Amount of memory allocated to PHP: %0.3fM.&#39;, memory_get_usage() / $M);
echo sprintf(&#39;<br/>Total memory allocated from system: %0.3fM.&#39;, memory_get_usage($real_usage=true) / $M);
echo &#39;<br/>success&#39;;

Testergebnis

Wenn $char_count 2 ist, wird eine Zeichenfolge initialisiert, die 2 MB Speicher belegt, und das Ausgabeergebnis ist

Current memory_limit value is: 10M.
Amount of memory allocated to PHP: 0.344M.
Amount of memory allocated to PHP: 2.348M.
Total memory allocated from system: 4.004M.
success

Wenn $char_count 20 ist, belegt eine Zeichenfolge Speicher Wird eine 20-M-Zeichenfolge initialisiert, lautet das Ausgabeergebnis

Current memory_limit value is: 10M.
Amount of memory allocated to PHP: 0.346M.

Beachten Sie, dass der HTTP-Statuscode 500 ist. Dies bedeutet, dass der PHP-Prozess beim Initialisieren der Zeichenfolge vom System beendet wird.

Sehen Sie sich die in Nginx error.log aufgezeichneten Protokollinformationen an

2017/03/01 10:41:23 [error] 6903#6903: *39 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Allowed memory size of 10485760 bytes exhausted (tried to allocate 20971552 bytes) in /home/zhongwei/work/test/memory_limit/index.php on line 8
PHP message: PHP Stack trace:
PHP message: PHP   1. {main}() /home/zhongwei/work/test/memory_limit/index.php:0
PHP message: PHP   2. str_repeat() /home/zhongwei/work/test/memory_limit/index.php:8" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "localhost:8093"

Die tatsächlichen Testergebnisse zeigen, dass „memory_limit“ nur die Obergrenze der Speichernutzung für jeden PHP-Prozess begrenzt, anstatt jedem Prozess festen Speicher zuzuweisen. Daher verringert sich die Anzahl der Parallelitäten nicht, da die Einstellung „memory_limit“ größer ist.

Was ist der Standardwert von „memory_limit“? Vor PHP 5.2 betrug er 8 Mio.

  • PHP 5.2 betrug 16 Mio

Das obige ist der detaillierte Inhalt vonSo begrenzen Sie die Speichernutzung des PHP-Prozesses mithilfe von „memory_limit“.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:sunzhongwei.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen