调查占用内核栈最大的位置
ftrace中有一个栈追踪功能,是在内核内部函数获取内核栈的消耗量,从消耗量最大的位置进行回溯的功能。内核栈是有限的(x86中为约8KB),因此栈的消耗量一旦超过上限,就有可能引起内存破坏或内核重大故障。
栈追踪器准确来说并不是ftrace的插件追踪器。但是由于接口使用的是ftrace,因此本节将其作为ftrace功能之一进行介绍。使用栈追踪器时需要使用下列方法之一。
·向Linux内核的启动选项传递stacktrace后启动。
·向/proc/sys/kernel/stack_tracer_enabled写入1。
这里使用第二个方法尝试进行栈追踪。
与其他追踪器最大的不同在于使用procfs来控制启用或禁用,以及从stack_trace这个特殊文件而不是从trace进行读出。
Depth表示该函数内最大的栈消耗量,Size表示仅该函数上使用的栈消耗量。加大负载一段时间后再次读入stack_trace,就会出现消耗了栈的执行路径。