memory_get_usage

memory_get_usage ― PHP に割り当てられたメモリの量を返す

PHP: memory_get_usage - Manual

最近この関数の存在を知った。今までは ps や top コマンドでメモリの使用量を見ていたのだけど、これがあればもう少し細かく見れそう。

サンプル

ソース
<?php
$mem1 = 0;
$mem2 = memory_get_usage();
$diff = $mem2 - $mem1;
echo "start\t{$mem2}\t{$diff}\n";

// 1M 個の配列を作る
$array1M = array_fill(0, 1024 * 1024, 'a');

$mem1 = $mem2;
$mem2 = memory_get_usage();
$diff = $mem2 - $mem1;
echo "make array\t{$mem2}\t{$diff}\n";

// 1M 文字の文字列
$str1M = implode('', $array1M);

$mem1 = $mem2;
$mem2 = memory_get_usage();
$diff = $mem2 - $mem1;
echo "make str\t{$mem2}\t{$diff}\n";

unset($array1M);

$mem1 = $mem2;
$mem2 = memory_get_usage();
$diff = $mem2 - $mem1;
echo "unset array\t{$mem2}\t{$diff}\n";

unset($str1M);

$mem1 = $mem2;
$mem2 = memory_get_usage();
$diff = $mem2 - $mem1;
echo "unset str\t{$mem2}\t{$diff}\n";

echo "peak\t", memory_get_peak_usage(), "\n";
出力
start   324664  324664
make array      67434044        67109380
make str        68482836        1048792
unset array     1373664 -67109172
unset str       324872  -1048792
peak    68483728
感想
  • 1M 個の配列を作った場合のメモリの増加量は約 67M バイト。
    • 配列 1 要素あたり約 67 バイト。
      • ブロック単位でメモリを確保するだろうから、実際の 1 要素あたりのメモリ使用量は目安レベルか。
  • 1M 文字の文字列を作った場合のメモリの増加量は 約 1M バイト。
    • 文字列 1 文字あたり約 1 バイト。