分析 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 的输出 的相关文章

  • 完成后关闭线程

    完成后如何关闭线程 比如确保没有任何东西再打开或运行 到目前为止我知道如何打开它 但是 不知道如何正确关闭它 int iret1 pthread t thread1 char message1 void multithreading1 vo
  • 使用具有最大并发进程数的 multiprocessing.Process

    我有Python code from multiprocessing import Process def f name print hello name if name main for i in range 0 MAX PROCESSE
  • WinDbg中出现“SOS版本与您正在调试的CLR版本不匹配”怎么办?

    我的某些应用程序出现问题 它是一个基于 wcf 的应用程序 在 Windows 2003 Server x86 的 IIS6 下运行 在事件日志中 我从 W3SVC WP 源 EventID 2262 收到这样的错误 ISAPI C WIN
  • 非法监控状态异常

    如何将轮询线程传递给另一个线程进行处理 程序执行在控制器类中 该类具有 main 方法和线程池 主类控制器 public static void main String args throws InterruptedException Ru
  • JMeter:tearDown Thread Group的目的是什么

    我想了解JMeter中tearDown Thread Group的实际用法 在什么场景下可以使用tearDown Thread Group 根据提供的帮助JMeter 拆解线程组 http jmeter apache org userman
  • C# 系统 CPU 使用情况并与 Windows 任务管理器同步

    这是一个由两部分组成的问题 我想将我的代码发布到堆栈上以帮助其他人完成相同的任务 问题一 我有一个代码子集 我相信它可以根据测量间隔正确测量 CPU 使用情况 根据检索的时间跨系统中的尽可能多的核心 我在线程调用中使用 1 秒 我必须从网上
  • 单线程公寓问题

    从我的主窗体中 我调用以下命令来打开一个新窗体 MyForm sth new MyForm sth show 一切都很好 但是这个表单有一个组合框 当我将其 AutoCompleteMode 切换为建议和追加时 我在显示表单时遇到了这个异常
  • 基于多线程的 RabbitMQ 消费者

    我们有一个 Windows 服务 它监听单个 RabbitMQ 队列并处理消息 我们希望扩展相同的 Windows 服务 以便它可以监听 RabbitMQ 的多个队列并处理消息 不确定使用多线程是否可以实现这一点 因为每个线程都必须侦听 阻
  • Android同步onSensorChanged?

    这是我的问题的后续 Android线程可运行性能 https stackoverflow com questions 36395440 android thread runnable performance 我在理解应用程序的同步方法时遇到
  • 内存不一致与线程交错有何不同?

    我正在编写一个多线程程序 正在研究是否应该使用volatile对于我的布尔标志 关于并发性的文档 oracle Trail 没有解释任何关于memory consistency errors以外 当不同的线程有内存一致性错误时 就会发生内存
  • BlockingCollection.TakeFromAny 方法是否适合构建阻塞优先级队列?

    我需要建立一个阻塞优先级队列 我的预感是TakeFromAny https learn microsoft com en us dotnet api system collections concurrent blockingcollect
  • 使用Python pool.map让多个进程对列表执行操作

    我试图启动 6 个线程 每个线程从列表文件中获取一个项目 将其删除 然后打印该值 from multiprocessing import Pool files a b c d e f def convert file process fil
  • Unity3d 中的多线程脚本调用

    我试图在Unity3d中实现多线程脚本执行 但是Unity库似乎没有提供方法 我们必须使用Mono提供的System Threading 但他们提到 Unity Scripting 不是线程安全的 我可以使用 System threadin
  • 使用互斥锁来阻止临界区外部的执行

    我不确定我的术语是否正确 但这里是 我有一个由多个线程使用的函数来写入数据 在注释中使用伪代码来说明我想要的内容 these are initiated in the constructor int data std atomic
  • 插入并发问题-多线程环境

    我有一个问题 即使用完全相同的参数在完全相同的时间调用相同的存储过程 存储过程的目的是获取记录 如果存在 或创建并获取记录 如果不存在 问题是两个线程都在检查记录是否存在并报告错误 然后都插入新记录 在数据库中创建重复记录 我尝试将操作保留
  • Python 和 sqlite3.ProgrammingError:不允许递归使用游标

    我写了一个像这样的Python程序 它应该在多线程模式下运行 def Func host cursor db cursor execute SELECT If index Username Version Community Ip traf
  • 使用 Boost:Asio 的游戏服务器如何异步工作?

    我正在尝试创建一个游戏服务器 目前我正在使用线程来制作它 每个对象 玩家 怪物 都有自己的带有 while 1 循环的线程 在其中执行特定的功能 服务器基本上是这样工作的 main some initialization while 1 r
  • 如何在.NET 中编写安全/正确的多线程代码?

    今天我必须修复一些使用线程的旧 VB NET 1 0 代码 问题在于从工作线程而不是 UI 线程更新 UI 元素 我花了一些时间才发现可以使用 InvokeRequired 断言来查找问题 除了上面提到的并发修改问题之外 还可能遇到死锁 竞
  • java - 简单计算在多线程中比在单线程中花费更长的时间

    我试图了解如何利用多线程 我写了一个简单的程序来增加i 比方说 使用两种方式 400 000 次 单线程方式 0 到 400 000 和多线程方式 在我的例子中 4 次 0 到 100 000 线程数等于Runtime getRuntime
  • 如果未返回,则在一段时间后终止线程

    我有一个线程从网络或串行端口获取一些数据 如果 5 秒内没有收到数据 则线程必须终止 或返回 false 换句话说 如果线程运行时间超过 5 秒 则必须停止 我用 C 编写 但任何 NET 语言都可以 有两种方法 1 封装超时 从网络或串行

随机推荐