real_usage
引数が PHP DOCS に設定されている場合、true
システムから割り当てられたメモリの実際のサイズを取得します。そうであればfalse
、によって報告されたメモリを取得しますemalloc()
これら 2 つのオプションのどちらが最大値を返します。php.ini のメモリ制限値に対して相対的に割り当てられたメモリ?
スクリプトがその限界にどれだけ近かったか知りたいです。
real_usage
引数が PHP DOCS に設定されている場合、true
システムから割り当てられたメモリの実際のサイズを取得します。そうであればfalse
、によって報告されたメモリを取得しますemalloc()
これら 2 つのオプションのどちらが最大値を返します。php.ini のメモリ制限値に対して相対的に割り当てられたメモリ?
スクリプトがその限界にどれだけ近かったか知りたいです。
わかりました、簡単なスクリプトを使用してこれをテストしましょう:
ini_set('memory_limit', '1M');
$x = '';
while(true) {
echo "not real: ".(memory_get_peak_usage(false)/1024/1024)." MiB\n";
echo "real: ".(memory_get_peak_usage(true)/1024/1024)." MiB\n\n";
$x .= str_repeat(' ', 1024*25); //store 25kb more to string
}
出力:
not real: 0.73469543457031 MiB
real: 0.75 MiB
not real: 0.75910949707031 MiB
real: 1 MiB
...
not real: 0.95442199707031 MiB
real: 1 MiB
not real: 0.97883605957031 MiB
real: 1 MiB
PHP Fatal error: Allowed memory size of 1048576 bytes exhausted (tried to allocate 793601 bytes) in /home/niko/test.php on line 7
実際の使用量は、システムから割り当てられたメモリのようです。これは、スクリプトで現在必要とされているよりも大きなバケットに割り当てられているようです。(パフォーマンス上の理由からだと思います)。これは、php プロセスが使用するメモリでもあります。
使用$real_usage = false
量は、スクリプトで実際に使用したメモリ使用量であり、Zend のメモリ マネージャによって割り当てられた実際のメモリ量ではありません。
詳細については、この質問をお読みください。
要するに、メモリ制限にどれだけ近づいているかを取得するには、次を使用します$real_usage = true
real_usage
false は、スクリプトが使用した使用法を報告します。これは、2 つのうちのより正確です。
real_usage
true は、スクリプトに割り当てられたメモリを報告します。これは2つのうち高い方になります。
true
スクリプトがメモリ制限を超えて割り当てられることはなく、スクリプト (および他のすべてのスクリプト) がその使用量を超えない限り実行し続けるため、比較しようとしている場合はおそらく使用します。
real_usage
未使用のページを含め、システムから割り当てられた合計メモリを取得するには、これを TRUE に設定します。設定されていないか FALSE の場合、使用されているメモリのみが報告されます。
したがって、スクリプトで使用されるメモリを取得するには、デフォルトの real_usage が false であるため、memory_get_usage() を使用する必要があります。
システムによって割り当てられたメモリを取得したいが、実際に使用された量を気にしない場合は、memory_get_usage(true); を使用します。