Malloc 日志
Malloc 日志是 malloc 子系统的可选扩展,允许用户获取有关调用进程当前具有的活动分配的信息。 然后该数据可被用于问题确定和性能分析。
malloc 日志中记录的数据
Malloc 日志为每个活动分配记录以下数据:
- 返回给调用者的地址。
- 分配的大小。
- 用于执行分配的堆。
- 调用函数的堆栈回溯。 所记录的回溯深度为可配置的选项。
此外,可选择记录以下信息:
- 调用进程的进程标识。
- 调用线程的线程标识。
- 有关进程启动的分配序号。
- 建立分配的实际时间。
在启用了 Malloc 日志时,每个成功的分配需要用来存储元数据的额外数量的开销。 对于 32 位应用程序此开销大约为 50-100 字节;对于 64 位应用程序则为两倍。 开销数量将根据设置的选项而变化。
可用以下方式访问 Malloc 日志信息:
- 使用 DBX malloc 子命令。
- 使用
report_allocationsmalloc 调试选项。
启用 malloc 日志
缺省情况下不启用 Malloc 日志。 要以缺省设置启用 Malloc 日志,请如下设置 MALLOCDEBUG 环境变量:
MALLOCDEBUG=log要以用户指定的配置选项启用 Malloc 日志,请如下设置 MALLOCDEBUG 环境变量:
MALLOCDEBUG=log:extended,stack_depth:6注: 缺省 Malloc 日志值如下所示:
- extended
- 缺省值为 off。 指定此选项将启用对以上指定的可选分配元数据的记录。 此参数将影响每个分配所需的开销数量。 如果
MALLOCTYPE设置为watson2,那么此选项没有任何效果。 - stack_depth
- 用于指定为每个分配所记录的函数调用堆栈的深度。 此参数影响每个分配所需的开销数量。缺省值为 4,最大值为 64。
限制
由于存在将数据存储到内存的代价,在启用 Malloc 日志时所有程序的性能可能下降。 内存使用将升高。
Malloc 日志调试功能与以下 malloc 策略和选项相容: