仮想ホスト PHP の
Memory_limit は、単一の PHP スクリプトの 1 回の実行で使用可能な最大メモリ制限です。デフォルトの制限は 256MB で、最大値は 512MB に調整できます。以下のエディタでは、memory_limit を使用して PHP プロセスのメモリ使用量を制限する方法を紹介します。
memory_limit 名前が示すように、PHP プロセスのメモリ使用量を制限します。例:
magento2 のシステム要件には、PHP のmemory_limit に関する制限があり、512M 未満にすることはできません。 (デフォルト値は128Mです。変更しないとmagentoのバックグラウンド処理ロジックが正常に実行されません)
PHP公式サイトの説明を見てください
#必須memory_limit の値が大きいほど、つまり、単一の PHP プロセスが占有するメモリが多くなるほど、システムが同時に処理できるリクエストが少なくなることに注意してください。たとえば、2G メモリを搭載したマシンの memory_limit が 128M に設定されている場合、同時に最大 16 個のリクエストを処理でき、memory_limit が 256M に設定されている場合、最大 8 個のリクエストを同時に処理できます。 resource_limit を 512M に設定すると、同時に最大 4 つのリクエストを処理できます。 もちろんそうではありません。memory_limit の主な目的は、プログラムのバグや無限ループが大量のメモリを占有し、システムのダウンタイムを引き起こすのを防ぐことです。多数のサードパーティのプラグインやコードを導入する場合、メモリを制限することが非常に必要になります。 Memory_limit は、各 PHP プロセスが固定量のメモリを占有するようにしますか? それとも、単に割り当てられたメモリの上限なのでしょうか? アイデアをテストし、memory_limit を 10M に設定し、PHP リクエストで 2M/20M 文字列を初期化し、システム プロセスでのメモリ使用量を確認します。 Nginx 設定これは、スクリプトが割り当てることができるメモリの最大量 (バイト単位)。これにより、不適切に作成されたスクリプトがサーバー上の利用可能なメモリを使い果たすことを防ぐことができます。メモリ制限を設けないようにするには、このディレクティブを -1.
## に設定することに注意してください。
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 $char_count = 2; $M = 1024 * 1024; echo sprintf("Current memory_limit value is: %s.", ini_get('memory_limit')); echo sprintf('<br/>Amount of memory allocated to PHP: %0.3fM.', memory_get_usage() / $M); $s = str_repeat("a", $M * $char_count); //sleep(30); echo sprintf('<br/>Amount of memory allocated to PHP: %0.3fM.', memory_get_usage() / $M); echo sprintf('<br/>Total memory allocated from system: %0.3fM.', memory_get_usage($real_usage=true) / $M); echo '<br/>success';
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
Current memory_limit value is: 10M. Amount of memory allocated to PHP: 0.346M.
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"
以上がMemory_limitを使用してPHPプロセスのメモリ使用量を制限する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。