こんにちは。よっしーです(^^)
今日は、PHPのmemory_get_usageについて解説しています。
背景
memory_get_usageについて調査する機会がありましたので、その時の内容を備忘として記事に残しました。
memory_get_usageとは
memory_get_usage()
は、PHPの組み込み関数で、スクリプトの実行中に割り当てられたメモリの量をバイト単位で返します。
この関数の主な特徴は次のとおりです。
返り値
- スクリプトの開始時からその時点までに割り当てられたメモリの量をバイト数で返します。
- メモリリークがある場合、この値は徐々に大きくなります。
メモリの種類
- この関数は、PHPスクリプト自身が使用するメモリ量のみを考慮します。
- データベースやファイルシステムなど、外部リソースが使用するメモリは含まれません。
使用例
- メモリリークのデバッグ
- メモリ使用量の最適化
- アプリケーションのパフォーマンスチューニング
メモリ管理は、パフォーマンスとリソース消費の観点から重要です。memory_get_usage()
を使えば、アプリケーションのメモリ使用状況を把握し、適切なメモリ管理戦略を立てることができます。
ただし、この関数だけではメモリリークの原因を特定することはできません。メモリプロファイリングツールと組み合わせて使う必要があります。
使用例
memory_get_usageの動作確認用のコードです。
<?php
function show_memory_get_usage($start_memory_get_usage)
{
$now_memory_get_usage = memory_get_usage();
printf('memory_get_usage() : %s [B]%s', number_format($now_memory_get_usage), PHP_EOL);
printf('use memory : %d [B]%s', number_format(($now_memory_get_usage - $start_memory_get_usage)), PHP_EOL);
}
show_memory_get_usage(0);
$start_memory_get_usage = memory_get_usage();
show_memory_get_usage($start_memory_get_usage);
$data1 = [];
for($i=0; $i < 10000; $i++) {
$data1[] = $i;
}
show_memory_get_usage($start_memory_get_usage);
$data2 = [];
for($i=0; $i < 10000; $i++) {
$data2[] = $i;
}
show_memory_get_usage($start_memory_get_usage);
unset($data1);
show_memory_get_usage($start_memory_get_usage);
unset($data2);
show_memory_get_usage($start_memory_get_usage);
動作確認
下記のような結果になります。
% php sample.php
memory_get_usage() : 400,288 [B]
use memory : 400 [B]
memory_get_usage() : 400,320 [B]
use memory : 0 [B]
memory_get_usage() : 666,616 [B]
use memory : 266 [B]
memory_get_usage() : 932,912 [B]
use memory : 532 [B]
memory_get_usage() : 666,616 [B]
use memory : 266 [B]
memory_get_usage() : 400,320 [B]
use memory : 0 [B]
解説
このコードは、PHPのメモリ使用量を確認するためのものです。
最初に show_memory_get_usage
関数が定義されています。この関数は、現在のメモリ使用量と、指定された開始時点からの使用メモリ量を出力します。
次に、この関数を最初に呼び出し、メモリ使用量を0として出力しています。
その後、memory_get_usage()
関数を使って現在のメモリ使用量を取得し、それを $start_memory_get_usage
に代入しています。
次に、サイズ10000の配列 $data1
を作成し、メモリ使用量を出力しています。
同様に、サイズ10000の配列 $data2
を作成し、メモリ使用量を出力しています。
その後、unset
関数を使って $data1
と $data2
を開放し、メモリ使用量を確認しています。
つまり、このコードは、配列の作成とメモリ解放がどのようにメモリ使用量に影響するかを示しています。配列を作成するとメモリ使用量が増加し、unset
でメモリを解放するとメモリ使用量が減少するのがわかります。
開発者がメモリ管理を適切に行うことで、アプリケーションのパフォーマンスを改善できることを示しています。
おわりに
今日は、memory_get_usage について解説しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント