分析 Windbg 中 !threadpool 和 !threads 的输出

2024-04-18

我已经在四台服务器上生成了转储,并正在分析 !threadpool 和 !threads 的输出。我注意到以下输出大致一致:

0:024> !threadpool
CPU utilization 0%
Worker Thread: Total: 2 Running: 0 Idle: 2 MaxLimit: 200 MinLimit: 2
Work Request in Queue: 0
Number of Timers: 27
Completion Port Thread:Total: 2 Free: 0 MaxFree: 4 CurrentLimit: 2 MaxLimit: 200 MinLimit: 2

!线程-特殊 线程数:32 未启动线程: 0 背景主题: 19 待处理线程:0 死线程:13 托管运行时:无


1)如何确定这27个定时器的来源是什么?

尝试寻找以下实例TimerCallback(对于线程.定时器):

!dumpheap -type TimerCallback

然后转储回调属性(其中回调地址是转储堆输出中的“地址”):

!do <callback address>

然后转储Value地址的_target财产:

!do <_target address>

这应该会吐出包含对 TimerCallback 的引用的对象,这应该会引导您到创建计时器的位置。

我建议查看Tess Ferrandez 的调试实验室 http://blogs.msdn.com/tess/pages/net-debugging-demos-information-and-setup-instructions.aspx,如果你还没有的话。

2)13个死线程是什么意思?

我的理解是,死线程是指不再具有活动操作系统线程的 C++ 线程,但仍然具有引用,因此无法被销毁(C++ 线程使用引用计数)。

C# 线程保存对 C++ 线程的引用,如果您的托管代码保存对 C# 线程的引用,那么这可能是您的问题。

这篇文章发表在 Yun Jin 的博客上 http://blogs.msdn.com/yunjin/archive/2005/08/29/457150.aspx您可能会感兴趣。(回溯存档) http://web.archive.org/web/20090115214354/http://blogs.msdn.com/yunjin/archive/2005/08/29/457150.aspx

3)我的一个线程被标记为有锁。如果我切换到该线程并运行 !clrstack,我会看到以下内容 - 它与我的计时器有关吗?

这看起来像一个(System.Threading)计时器线程等待其时间间隔过去。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分析 Windbg 中 !threadpool 和 !threads 的输出 的相关文章

  • 如何找到锁的所有者(监视器)?

    有没有办法发现哪个线程当前拥有锁 具体来说 我正在寻找一些代码来打印出阻止锁定的线程 我想尝试锁定给定的超时时间 然后报告哪个线程正在阻止锁定 不需要 只需编写代码 private int lockOwner private object
  • 在 C# 中使用 volatile (Thread.VolatileRead/Thread.VolatileWrite)

    在多CP U机器上运行的多线程程序中 我是否需要使用易失性读 写来访问共享状态 下面示例代码中的 data 以确保正确性 换句话说 堆对象可以缓存在cpu上吗 使用下面的示例并假设多线程将访问 GetValue 和 Add 方法 我需要 T
  • 使用 pythonw.exe 时 Python subprocess.call() 失败

    我有一些 Python 代码 当我使用 python exe 运行时可以正常工作 但如果我使用 pythonw exe 则失败 def runStuff commandLine outputFileName somefile txt out
  • 使用ThreadPoolExecutor,allowCoreThreadTimeOut和零核心线程有什么区别?

    阅读以下文档线程池执行器 https docs oracle com javase 7 docs api java util concurrent ThreadPoolExecutor html 我很困惑以下示例用法之间的区别 零个核心线程
  • C# 显示对话框线程

    我有一个Dialog Box 导入器 我用它来选择要导入到应用程序中的文件 这Dialog Box 导入器 还有另一个对话框 文件 它是OpenFileDialog 代码运行如下 Main File if Importer ShowDial
  • JavaFX 多线程 - 连接线程不会更新 UI

    我正在尝试创建一个加载程序对话框 用户可以在其中知道程序正在加载所请求的内容并且程序正在按预期运行 但正因为如此 我需要join 解析器线程和之前继续主线程 这使得对话框空白 解析器任务 java public class ParserTa
  • Pthreads - 高内存使用率

    我正在用 C 编写一些东西 在 256Mb 系统上的 Linux 中创建大量 Pthread 我通常有 200Mb 的免费空间 当我使用少量线程运行该程序时 它可以工作 但是一旦我让它创建大约 100 个线程 它就会出现错误 因为系统内存不
  • 通过不同的线程使用多个 ORB(多线程多 Orb 客户端应用程序) - 如何?

    This question is related to Is it possible to have several ORB objects in the same process https stackoverflow com quest
  • Awaiter (GetAwaiter) 和ContinueWith 有什么区别

    在 net 4 0中 我经常使用Task ContinueWith 但是之后我发现了 task GetAwaiter https stackoverflow com a 14171923 284758这似乎有同样的目的 有什么不同 如果您的
  • 无法从 run 方法中访问对象的属性(方法)! Java多线程

    我在 ServerConnectionManager 中有以下代码 public class ServerConnectionManager implements Runnable private DatagramPacket receiv
  • 是否存在与 Windows 7 内核符号相关的已知问题?

    我有几台 Windows 7 机器 我无法读取它们的内存转储 我发现一些我怀疑可能相关的东西 但并不肯定 https twitter com aionescu status 634028737458114560 https twitter
  • 原子变量能保证内存可见性吗?

    关于内存可见性的小问题 代码示例1 class CustomLock private boolean locked false public boolean lock if locked locked true return true re
  • ThreadPoolExecutor 和队列

    我以为使用线程池执行器 http docs oracle com javase 6 docs api java util concurrent ThreadPoolExecutor html我们可以提交Runnables 要在以下位置执行B
  • 将 Python 控制台集成到 GUI C++ 应用程序中

    I m going to add a python console widget into a C GUI below some other controls 许多类将暴露给 python 代码 包括一些对 GUI 的访问 也许我会考虑 P
  • SLURM 节点、任务、核心和 CPU

    有人能够澄清这些东西到底是什么吗 据我所知 节点是集群内的计算点 本质上是一台计算机 任务是可以在单个节点或多个节点上执行的进程 核心基本上是指您希望在单个节点上分配多少 CPU 来执行分配给该 CPU 的任务 它是否正确 我混淆了什么吗
  • 带等待/通知的同步块与不带等待/通知的同步块之间的区别?

    如果我只是使用synchronized 不是wait notify方法 它仍然是线程安全的吗 有什么不同 Using synchronized使方法 块一次只能由一个线程访问 所以 是的 它是线程安全的 这两个概念是结合在一起的 而不是相互
  • 为什么绿色线程不能在多核上工作

    在维基百科上 绿色线程 http en wikipedia org wiki Green threads被描述为通常无法在多核上运行 而没有解释原因 在多核处理器上 本机线程实现可以 自动将工作分配给多个处理器 而绿色线程 实现通常不能 我
  • 如何在给定点停止线程?

    我试图停止一些线程 阅读一些有关优雅地执行此操作的正确方法的内容 但我一定做错了什么 因为它根本不起作用 起初我尝试不使用lock with IsRunning不稳定 然后尝试使用锁 这是我所拥有的 private volatile boo
  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但

随机推荐