pstack 作为分析工具有多可靠?
Posted
技术标签:
【中文标题】pstack 作为分析工具有多可靠?【英文标题】:How reliable is pstack as a profiling tool? 【发布时间】:2012-11-15 07:14:45 【问题描述】:我一直在使用 pstack(定期在循环中调用)来替代真正的分析工具。我注意到即使顶部的该 pid 的 cpu 使用率超过 85%,pstack 显示该 pid 在 I/O 上被阻塞的频率高于 CPU 受限。
pstack 是如何实现的?当 pstack 在 I/O 上实际被阻塞时,pstack 是否更容易附加到 pid?
【问题讨论】:
【参考方案1】:您说您在循环中定期调用 pstack
- 即在与您正在分析的进程 (A) 不同的进程 (B) 中。如果它们在单核中运行,那么当 A 被阻塞时,B 更有可能“唤醒”。
无论如何,我会手动触发pstack
,理论上不需要太多样本。相反,我做得到的样本需要仔细检查,而不是简单地放在一起。
一般来说,最好在 I/O 时间和 CPU 时间进行采样,因为 I/O 和 CPU 浪费都会使您的程序变慢。 如果它在某种程度上夸大了其中一个或另一个,那是相当无害的,假设您的真正目标是精确识别要优化的事物,而不是仅仅获得模糊事物(如函数)的精确测量。
【讨论】:
是的 pstack 是在 bash 的循环中调用的。这是一台 16 核机器,所以我不确定 pid 被配置文件和 pstack 在同一个核心上运行的可能性有多大。在单核机器上,这很有意义。 我也同意您需要分析 I/O 调用和 CPU 密集型调用。这只是一种预感——我注意到 pstack 总是在堆栈顶部报告 I/O 调用,这比您预期的要多得多,因为该进程在顶部连续使用近 85-90% 的 cpu。你会期望它受 CPU 限制。 @Harish:每当我这样做时,都是因为我想加快代码速度,所以我会在你的情况下说 - 堆栈示例在 I/O 中,但堆栈会告诉你目的的 I/O。也许你可以找到一种方法来减少它。 OTOH,您可以丢弃 I/O 中的样本并查看 CPU 样本。它在做什么,为什么?如果即使在少至 两个 样本上,您看到它在做一些您可以少做或根本不做的事情,它会得到回报,保证。然后再做一遍。这样一来,您就可以不断地啃它,直到您自己感到惊讶为止-它很多快了。以上是关于pstack 作为分析工具有多可靠?的主要内容,如果未能解决你的问题,请参考以下文章