【问题标题】:Counting how many times a thread has been preempted?计算一个线程被抢占了多少次?
【发布时间】:2012-03-29 16:43:10
【问题描述】:

我正在尝试确定上下文切换对我的 Java 线程的影响。因此,我必须首先知道“它被抢占了多少次?”其次,如果可能的话,“我的线程暂停执行多长时间?”。我非常怀疑这可以从 Java 中完成,但是 嘿!有趣的是做不可能的事,对吧? :) 即使我必须重新编译 VM 或使用某种 LINUX 工具或 hack,我也会很高兴。所以,既然我们知道这是不可能的,那就去做吧。 :)

编辑:来吧人们。另一个问题与优先级有关。我猜你只是喜欢简单而无聊的问题。问题清晰有效。

【问题讨论】:

  • 这对我来说很像过早的优化。您要求的是普通 JVM 不提供的东西。您能否编辑您的问题并解释为什么需要这样做?
  • 即使能做到,这也几乎没有任何价值。这将在很大程度上取决于您的测试 CPU,以及许多其他环境因素,以及您正在测试的代码的可变性。
  • 查看我的编辑。这个问题清楚有效。
  • 也许kernelshark 提供了这些信息?否则,perfoprofile 可能会显示一些内容。

标签: java linux multithreading pthreads real-time


【解决方案1】:

如果您可以识别您感兴趣的 Java 线程的 Linux TID(线程 ID)(假设您的 JVM 将 Java 线程映射到 Linux 线程),那么伪文件 /proc/<tid>/status 包含许多统计信息,包括 voluntary_ctxt_switchesnonvoluntary_ctxt_switches

【讨论】:

    【解决方案2】:

    它显然不能满足您的所有需求,但您可能会发现 java.lang.management 中的 ThreadMXBean 很有用。

    【讨论】:

    • 已经是这样了。如果争用时间增加,则意味着线程被阻塞/中断。人们想结束这个问题。 ts ts ts
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    相关资源
    最近更新 更多