Linux pstack作为分析工具的可靠性如何?

Linux pstack作为分析工具的可靠性如何?,linux,debugging,linux-kernel,profiling,Linux,Debugging,Linux Kernel,Profiling,我一直在使用pstack(周期性地在循环中调用)作为真正的分析工具的替代品。我注意到,尽管顶部的pid有超过85%的cpu使用率,但pstack显示pid在I/O上被阻塞的频率比cpu受限的频率更高 pstack是如何实现的?是否有任何原因说明pstack在I/O上实际被阻塞时更容易连接到pid?您说您在循环中周期性地调用pstack,即在与您正在分析的进程(a)不同的进程(B)中。如果它们在单个内核中运行,那么当a被阻塞时,B更有可能“醒来” 无论如何,我会手动触发pstack,理论上不需要太

我一直在使用pstack(周期性地在循环中调用)作为真正的分析工具的替代品。我注意到,尽管顶部的pid有超过85%的cpu使用率,但pstack显示pid在I/O上被阻塞的频率比cpu受限的频率更高


pstack是如何实现的?是否有任何原因说明pstack在I/O上实际被阻塞时更容易连接到pid?

您说您在循环中周期性地调用
pstack
,即在与您正在分析的进程(a)不同的进程(B)中。如果它们在单个内核中运行,那么当a被阻塞时,B更有可能“醒来”

无论如何,我会手动触发
pstack
,理论上不需要太多样本。相反,我得到的样本需要仔细检查,而不仅仅是集中在一起

一般来说,在I/O时间和CPU时间进行采样是很好的,因为I/O和CPU浪费都会使程序变慢。
假设您的真正目标是精确地确定要优化的内容,而不是仅仅获得模糊内容(如函数)的精确测量值,那么如果它稍微膨胀了一个或另一个,那么这是相当无害的。

是的,pstack在bash的循环中被调用。这是一台16核的机器,所以我不确定实际情况下pid被分析和pstack在同一个核上运行的可能性有多大。在单核机器上,这会很有意义。我也同意您需要分析I/O调用和CPU密集型调用。这只是一种预感——我注意到pstack总是在堆栈顶部报告I/O调用,这比您预期的要多得多,因为该进程的cpu使用率一直在顶部,接近85-90%。您可能希望它是CPU受限的。@Harish:每当我这样做的时候,都是因为我想加快代码的速度,所以在您的例子中,我会说-堆栈示例在I/O中,但堆栈告诉您I/O的用途。也许您可以找到一种方法来做得更少。OTOH,您可以丢弃I/O中的样本,然后查看CPU样本。它在做什么?为什么?如果只打开两个样本,你就能看到它做了一些你能做得更少或根本做不到的事情,它肯定会有回报的。然后再做一遍。这样的话,你就可以一点一点地吃它,直到你能给自己一个惊喜——它会快得多。