Measuring stack usage for Linux multi-threaded app我正在为Linux嵌入式平台开发多线程应用程序。 目前,我正在将每个线程的堆栈大小(通过pthread_set_attr)设置为一个相当大的默认值。 我想将每个线程的值微调为更小的值,以减少应用程序的内存使用量。 我可以通过反复试验的方法将每个线程的堆栈大小设置为逐渐减小的值,直到程序崩溃为止,但是应用程序使用约15个线程,每个线程具有完全不同的功能/属性,因此该方法将非常耗时。 我宁愿能够直接测量每个线程的堆栈使用情况。 有一些公用事业人士可以推荐这样做吗? (例如,我来自vxWorks背景,并且使用vxWorks shell中的" ti"命令直接提供了堆栈使用情况的统计信息以及任务状态的其他有用信息。) 谢谢 这是两个衡量Linux应用程序中(本机pthread)堆栈使用率的工具:
瓦尔格朗德 用法:
Valgrind是一种稳定而强大的工具,不仅可用于测量堆栈使用情况。它可能不支持所有嵌入式CPU型号。 堆放 用法:
Stackusage是专为测量线程堆栈使用量而设计的轻量级工具,对于配备glibc的大多数嵌入式Linux平台来说,它应该是可移植的。在这一点上,它可能不如Valgrind / drd那样经过充分测试或成熟。 完全公开:我是Stackusage的作者。 我不知道有什么好的工具,但是作为最后的选择,您可以在应用程序中包含一些代码来检查它,类似于以下内容:
在某些嵌套最深的函数中,必须调用check_stack_size()函数。 然后,作为线程中的最后一条语句,您可以将stack_max_size输出到某个地方。 stack_start变量必须在线程开始时进行初始化:
引用Tobi的答案:如果很难在线程初始化时设置变量,则可以随时使用 |