Manpages

名 前

memusage − プ ロ グ ラ ム の メ モ リ ー 使 用 量 の プ ロ フ ァ イ ル を 行 う

書 式

memusage [option]... program [programoption]...

説 明

memusage は 、 プ ロ グ ラ ム program の メ モ リ ー 使 用 量 の プ ロ フ ァ イ ル を 行 う bash ス ク リ プ ト で あ る 。 呼 び 出 し 元 の 環 境 に (LD_PRELOAD 環 境 変 数 を 使 っ て ) libmemusage.so ラ イ ブ ラ リ を プ レ ロ ー ド す る 。 ld.so(8) を 参 照 。 libmemusage.so ラ イ ブ ラ リ は 、 malloc(3), calloc(3), free(3), realloc(3) の 呼 び 出 し を 横 取 り し 、 メ モ リ ー 割 り 当 て 状 況 の 追 跡 を 行 う 。 追 加 で 、 mmap(2), mremap(2), munmap(2) を 追 跡 す る こ と も で き る 。

memusage は 収 集 し た デ ー タ を テ キ ス ト 形 式 で 出 力 す る こ と も で き る し 、 memusagestat(1) を 使 っ て 収 集 し た デ ー タ を グ ラ フ に し た PNG フ ァ イ ル を 作 成 す る こ と も で き る (以 下 の −p オ プ シ ョ ン を 参 照 )。 メ モ リ ー 使 用 量 概 要
memusage
が 出 力 す る "Memory usage summary" (メ モ リ ー 使 用 量 概 要 ) の 行 に は 以 下 の フ ィ ー ル ド が 含 ま れ る 。

heap total

malloc(3) の す べ て の 呼 び 出 し の size 引 き 数 の 合 計 、 calloc(3) の す べ て の 呼 び 出 し の 引 き 数 の 積 (nmemb*size)、 mmap(2) の す べ て の 呼 び 出 し の length 引 き 数 の 合 計 。 realloc(3)mremap(2) の 場 合 、 割 り 当 て の 新 し い サ イ ズ が 以 前 の サ イ ズ よ り も 大 き い 場 合 、 差 分 (新 し い サ イ ズ か ら 古 い サ イ ズ を 引 い た 値 ) の 合 計 が 加 算 さ れ る 。

heap peak

malloc(3)size 引 き 数 、 calloc(3)nmemb*size の 積 、 realloc(3)size 引 き 数 、 mmap(2)length 引 き 数 、 mremap(2)new_size 引 き 数 、 の 中 の 最 大 値 。

stack peak 監 視 さ れ る 関 数 の 最 初 の 呼 び 出 し が 行 わ れ る 前 に 、 ス タ ッ ク ポ イ ン タ ー ア ド レ ス (ベ ー ス ス タ ッ ク ポ イ ン タ ー ) が 保 存 さ れ る 。 関 数 の そ れ ぞ れ の 呼 び 出 し 後 に は 、 実 際 の ス タ ッ ク ポ イ ン タ ー ア ド レ ス を 読 み 込 み 、 ベ ー ス ポ イ ン タ ー ア ド レ ス を 元 に 差 分 を 計 算 す る 。 こ れ ら の 差 分 の 最 大 値 が ス タ ッ ク の ピ ー ク 値 と な る 。 こ の 概 要 行 の 直 後 に は 、 監 視 対 象 の 各 関 数 の 呼 び 出 し 回 数 、 割 り 当 て ・ 割 り 当 て 解 除 さ れ た 全 メ モ リ ー 量 、 失 敗 し た 回 数 が テ ー ブ ル で 表 示 さ れ る 。 realloc(3)mremap(2) の 場 合 に は 、 フ ィ ー ル ド "nomove" で ブ ロ ッ ク ア ド レ ス を 変 更 し た 再 割 り 当 て 数 を 、 フ ィ ー ル ド "dec" で ブ ロ ッ ク サ イ ズ が 減 少 し た 再 割 り 当 て 数 が 追 加 で 表 示 さ れ る 。 realloc(3) の 場 合 、 フ ィ ー ル ド "free" で ブ ロ ッ ク の 解 放 が 行 わ れ た 再 割 り 当 て (サ イ ズ が 0 の 再 割 り 当 て ) の 数 も 追 加 で 表 示 さ れ る 。

memusage が 出 力 す る テ ー ブ ル の "realloc/total memory" (再 割 り 当 て メ モ リ ー /全 メ モ リ ー ) に は 、 realloc(3) を 使 っ て メ モ リ ー ブ ロ ッ ク を そ の 前 よ り も 小 さ い サ イ ズ に 再 割 り 当 て さ れ た 場 合 は 含 ま れ な い 。 こ の た め 、 ("free" 以 外 の ) す べ て の 「 総 メ モ リ ー 」 の セ ル は "free/total memory" セ ル よ り も 大 き く な る こ と が あ る 。 ブ ロ ッ ク サ イ ズ の ヒ ス ト グ ラ ム
"Histogram for block sizes" (ブ ロ ッ ク サ イ ズ の ヒ ス ト グ ラ ム ) は 、 メ モ リ ー 割 り 当 て を バ ケ ッ ト サ イ ズ 単 位 に 分 割 し た 情 報 で あ る 。

オ プ シ ョ ン

−n name−−progname=name プ ロ フ ァ イ ル 対 象 の プ ロ グ ラ ム フ ァ イ ル 名 。
−p 
file−−png=file

PNG 画 像 を 生 成 し 、 file に 格 納 す る 。

−d file−−data=file バ イ ナ リ ー デ ー タ フ ァ イ ル を 生 成 し 、 file に 格 納 す る 。
−u
−−unbuffered 出 力 バ ッ フ ァ ー リ ン グ を 行 わ な い 。
−b 
size−−buffer=size 出 力 す る 前 に size 個 の エ ン ト リ ー の 収 集 を 行 う 。
−−no−timer
ス タ ッ ク ポ イ ン タ ー 値 の 時 間 ベ ー ス の サ ン プ リ ン グ (SIGPROF) を 無 効 に す る 。
−m
−−mmap

mmap(2), mremap(2), mmap(2) も 追 跡 対 象 と す る 。

−?−−help ヘ ル プ を 表 示 し 、 終 了 す る 。
−−usage
簡 潔 な 使 用 方 法 を 表 示 し て 終 了 す る 。
−V
−−version バ ー ジ ョ ン 情 報 を 表 示 し て 終 了 す る 。 以 下 の オ プ シ ョ ン は 画 像 出 力 を 行 う 場 合 に の み 適 用 さ れ る 。
−t
−−time−based

X 軸 の 目 盛 と し て (関 数 呼 び 出 し 数 で は な く ) 時 間 を 使 用 す る 。

−T−−total メ モ リ ー の 全 使 用 量 の グ ラ フ も 生 成 す る 。
−−title=
name グ ラ フ の タ イ ト ル と し て name を 使 用 す る 。
−x 
size−−x−size=size グ ラ フ の 幅 を size ピ ク セ ル に す る 。
−y 
size−−y−size=size グ ラ フ の 高 さ を size ピ ク セ ル に す る 。

終 了 ス テ ー タ ス

終 了 ス テ ー タ ス は プ ロ フ ァ イ ル し た プ ロ グ ラ ム の 終 了 ス テ ー タ ス と 同 じ に な る 。

以 下 の 簡 単 な プ ロ グ ラ ム は 、 ピ ー ク に 達 す る ま で 繰 り 返 し メ モ リ ー ブ ロ ッ ク の 再 割 り 当 て を 行 い 、 そ の 後 ブ ロ ッ ク サ イ ズ が 0 に な る ま で 繰 り 返 し 順 に 小 さ な ブ ロ ッ ク に 再 割 り 当 て を 行 う 。 こ の プ ロ グ ラ ム を コ ン パ イ ル し て 以 下 の コ マ ン ド を 実 行 す る と 、 こ の プ ロ グ ラ ム の メ モ リ ー 使 用 量 が フ ァ イ ル memusage.png に 出 力 さ れ る 。

$ memusage −−data=memusage.dat ./a.out
...
Memory usage summary: heap total: 45200, heap peak: 6440, stack peak: 224
total calls total memory failed calls
malloc| 1 400 0
realloc| 40 44800 0 (nomove:40, dec:19, free:0)
calloc| 0 0 0
free| 1 440
Histogram for block sizes:
192−207 1 2% ================
...
2192−2207 1 2% ================
2240−2255 2 4% =================================
2832−2847 2 4% =================================
3440−3455 2 4% =================================
4032−4047 2 4% =================================
4640−4655 2 4% =================================
5232−5247 2 4% =================================
5840−5855 2 4% =================================
6432−6447 1 2% ================
$ memusagestat memusage.dat memusage.png プ ロ グ ラ ム の ソ ー ス

#include <stdio.h>
#include <stdlib.h>

#define CYCLES 20

int
main(int argc, char *argv[])
{
int i, j;
int *p;

printf("malloc: %zd\n", sizeof(int) * 100);
p = malloc(sizeof(int) * 100);

for (i = 0; i < CYCLES; i++) {
if (i < CYCLES / 2)
j = i;
else
j−−;

printf("realloc: %zd\n", sizeof(int) * (j * 50 + 110));
p = realloc(p, sizeof(int) * (j * 50 + 100));

printf("realloc: %zd\n", sizeof(int) * ((j+1) * 150 + 110));
p = realloc(p, sizeof(int) * ((j + 1) * 150 + 110)); }

free(p);
exit(EXIT_SUCCESS); }

バ グ

バ グ 報 告 に つ い て は http://www.gnu.org/software/libc/bugs.html">http://www.gnu.org/software/libc/bugs.html を 参 照 の こ と 。

関 連 項 目

memusagestat(1), mtrace(1) ld.so(8)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。