Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

5.3.3. 使用 Massif 查看堆和栈空间配置

Massif 使用指定的程序测量堆 空间,包括有用空间以及用于记录和对齐而分配的额外空间。它可以帮助您减少程序使用的内存量,增加程序速度,并减少程序耗尽机器 swap 空间的可能性。Massif 还可以提供有关您程序用来分配堆 内存的部分的详情。使用 Massif 运行的程序的运行速度比其一般执行速度慢 20 倍。
要给出程序堆 用量信息,请将 massif 指定为您要使用的 Valgrind 工具:
# valgrind --tool=massif program
Massif 收集的配置数据会写入一个文件,默认为 massif.out.pid,其中 pid 是指定的 program 的进程 ID。
还可以使用 ms_print 命令绘制配置数据图,比如:
# ms_print massif.out.pid
这样可以生成显示程序执行期间内存消耗的图表,以及有关在程序中不同点进行分配的地点详情,其中包括峰值内存分配点。
Massif 提供大量命令行选项可用于该工具的直接输出结果。这些可用选项包括:
--heap
指定是否执行堆 分析。默认值为 yes。将此选项设定为 no 即可禁用堆 分析。
--heap-admin
指定启用堆 分析时每个块用于管理的字节数。默认每个块有 8 字节。
--stacks
指定是否执行栈分析。默认值为 no(禁用)。要启用栈分析,请将这个选项设定为 yes,但请注意这样做会极大降低 Massif 速度。另外还要注意 Massif 假设开始时主栈大小为 0 以便更好的显示要分析的程序的栈所控制的比例。
--time-unit
指定用来分析的时间单位。这个选项三个有效值:执行的指令(i),即默认值,用于大多数情况;即时(ms,单位毫秒),可用于某些特定事务;以及在堆(/或者)栈中分配/取消分配的字节(B),用于很少运行的程序,且用于测试目的,因为它最容易在不同机器中重现。这个选项在使用 ms_print 输出结果画图是游泳。
选项完整列表请参考 /usr/share/doc/valgrind-version/valgrind_manual.pdf 中的文档。