【发布时间】: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
我一直在使用 pstack(定期在循环中调用)来替代真正的分析工具。我注意到即使顶部的该 pid 的 cpu 使用率超过 85%,pstack 显示该 pid 在 I/O 上被阻塞的频率高于 CPU 受限。
pstack 是如何实现的?当 pstack 在 I/O 上实际被阻塞时,pstack 是否更容易附加到 pid?
【问题讨论】:
标签: linux debugging linux-kernel profiling
您说您在循环中定期调用 pstack - 即在与您正在分析的进程 (A) 不同的进程 (B) 中。如果它们在单核中运行,那么当 A 被阻塞时,B 更有可能“唤醒”。
无论如何,我会手动触发pstack,理论上不需要太多样本。相反,我做得到的样本需要仔细检查,而不是简单地放在一起。
一般来说,最好在 I/O 时间和 CPU 时间进行采样,因为 I/O 和 CPU 浪费都会使您的程序变慢。 如果它在某种程度上夸大了其中一个或另一个,那是相当无害的,假设您的真正目标是精确识别要优化的事物,而不是仅仅获得模糊事物(如函数)的精确测量。
【讨论】: