Memory_get_usage()をコードの重要な位置に挿入することにより、アプリケーションのメモリ使用量をリアルタイムで監視し、メモリリークまたは不要なメモリ使用量を迅速に検出できます。簡単な例を次に示します。
<span><span><span class="hljs-comment">// 現在のメモリ使用法を取得します</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"現在のメモリ使用: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_usage</span></span><span>() . </span><span><span class="hljs-string">" バイト\n"</span></span><span>;
</span><span><span class="hljs-comment">// いくつかの操作をシミュレートします</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">range</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">1000000</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"操作後のメモリ使用: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_usage</span></span><span>() . </span><span><span class="hljs-string">" バイト\n"</span></span><span>;
</span><span><span class="hljs-comment">// 無料のメモリ</span></span><span>
</span><span><span class="hljs-keyword">unset</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"無料のメモリ后的使用量: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_usage</span></span><span>() . </span><span><span class="hljs-string">" バイト\n"</span></span><span>;
</span></span>
結果を出力することにより、アレイの動作の前後にメモリが変化することを確認でき、それにより、一部の操作がメモリ使用量の異常な増加を引き起こすかどうかを判断できます。
一部のパフォーマンスチューニングでは、スクリプトの実行中にメモリピークを理解することが特に重要です。 memory_get_peak_usage()を使用すると、コードのどの部分がメモリ使用量が急増するかを特定するのに役立ちます。例えば:
<span><span><span class="hljs-comment">// メモリピーク値を取得します</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"スクリプト実行中のメモリピーク: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_peak_usage</span></span><span>() . </span><span><span class="hljs-string">" バイト\n"</span></span><span>;
</span><span><span class="hljs-comment">// メモリ消費をシミュレートします</span></span><span>
</span><span><span class="hljs-variable">$array1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">range</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">1000000</span></span><span>);
</span><span><span class="hljs-variable">$array2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">range</span></span><span>(</span><span><span class="hljs-number">1000001</span></span><span>, </span><span><span class="hljs-number">2000000</span></span><span>);
</span><span><span class="hljs-comment">// 新しいメモリピークを取得します</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"新しいメモリピーク: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">memory_get_peak_usage</span></span><span>() . </span><span><span class="hljs-string">" バイト\n"</span></span><span>;
</span></span>
このようにして、メモリ、特に複雑なデータ処理または大規模な配列/オブジェクト操作に対するさまざまな操作の影響を分析できます。リンクにより、メモリ使用量が急激に増加しました。
memory_get_usage()およびmemory_get_peak_usage()によって返されるデータを分析することにより、潜在的なメモリボトルネックを発見し、ターゲットを絞った方法で最適化できます。一般的な最適化方法は次のとおりです。
不要な変数を避けてください:時間内に使用されなくなった変数、特に大きな配列またはオブジェクト。 unset()を使用すると、メモリの使用量を減らすことができます。
ジェネレーターの使用:大量のデータを処理する場合、従来の配列の代わりにPHPのジェネレーターを使用すると、メモリの消費が大幅に削減される可能性があります。
データ構造の最適化:メモリの使用に関しては、適切なデータ構造を選択することが重要です。たとえば、配列を使用する場合、複雑なオブジェクトを文字列や整数などのクリーンなデータ型に置き換えることができる場合、メモリの使用量を大幅に削減できます。
メモリリークを避ける:メモリリークは通常、参照が適切にクリアされていないためです。使用されていないオブジェクトや配列が解放されていることを確認する必要があります。特に、メモリの蓄積を避けるために、ループや長期にわたるスクリプトで
キャッシングメカニズム:一部の高電流アプリケーションでは、キャッシュメカニズム(Redis、Memcachedなど)を使用して、メモリの使用量を削減し、応答速度を向上させます。このタイプのキャッシュシステムは、メモリ内で頻繁にデータを保存し、データベースの負担を軽減します。
大量のデータを処理するPHPアプリケーションでは、 Memory_get_usageとMemory_get_peak_usageがメモリ分析に使用され、メモリ使用量のボトルネックを発見するのに役立ちます。ユーザーによってアップロードされたCSVファイルを処理すると、プログラムはファイル全体をメモリに処理するために読み取り、メモリ消費が過剰になり、最終的にメモリオーバーフローエラーが発生します。
ピークメモリを分析することにより、メモリの使用量がファイルサイズとともに直線的に増加することがわかります。最後に、バッチ内のファイルを読み取り、ジェネレーターを使用してデータラインを処理することにより、メモリ消費量を元の2GBから500MBに減らし、アプリケーションの安定性とパフォーマンスを大幅に改善しました。