Man page - memusage(1)

Packages contains this manual

Available languages:

en fr da ja ru ro de

Manual

MEMUSAGE

名 前
書 式
説 明
メ モ リ ー 使 用 量 概 要
ブ ロ ッ ク サ イ ズ の ヒ ス ト グ ラ ム
オ プ シ ョ ン
終 了 ス テ ー タ ス
バ グ

プ ロ グ ラ ム の ソ ー ス
関 連 項 目
こ の 文 書 に つ い て

名 前

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), munmap (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 ピ ク セ ル に す る 。

終 了 ス テ ー タ ス

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

バ グ

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

以 下 の 簡 単 な プ ロ グ ラ ム は 、 ピ ー ク に 達 す る ま で 繰 り 返 し メ モ リ ー ブ ロ ッ ク の 再 割 り 当 て を 行 い 、 そ の 後 ブ ロ ッ ク サ イ ズ が 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;
size_t size;
int *p;

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

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

size = sizeof(*p) * (j * 50 + 110);
printf("realloc: %zu\n", size);
p = realloc(p, size);

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

free(p);
exit(EXIT_SUCCESS);
}

関 連 項 目

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

こ の 文 書 に つ い て

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