【问题标题】:How reliable is pstack as a profiling tool?pstack 作为分析工具有多可靠?
【发布时间】:2012-11-15 07:14:45
【问题描述】:

我一直在使用 pstack(定期在循环中调用)来替代真正的分析工具。我注意到即使顶部的该 pid 的 cpu 使用率超过 85%,pstack 显示该 pid 在 I/O 上被阻塞的频率高于 CPU 受限。

pstack 是如何实现的?当 pstack 在 I/O 上实际被阻塞时,pstack 是否更容易附加到 pid?

【问题讨论】:

    标签: linux debugging linux-kernel profiling


    【解决方案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 样本。它在做什么,为什么?如果即使在少至 两个 样本上,您看到它在做一些您可以少做或根本不做的事情,它会得到回报,保证。然后再做一遍。这样一来,您就可以不断地啃它,直到您自己感到惊讶为止-它很多快了。
    猜你喜欢
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    相关资源
    最近更新 更多