WinDbg——TraceListener 和饱和线程池

2024-02-13

我有一个多线程 .NET Windows 服务,它间歇性地挂起——可能每两周 24/7 运行一次。当发生挂起时,线程池完全饱和,因为对我们的自定义跟踪侦听器的调用由于某种原因开始阻塞。根据 Windbg 的说法,有问题的代码中没有任何锁,也没有任何阻塞,但它们肯定在某个地方阻塞了。堆栈上也没有任何异常。 BufferedStream.Write 代码中偶尔会遇到 Thread.Sleep(1),但我的问题是 ReOpenMetaDataWithMemory、CreateApplicationContext 和 DllCanUnloadNow 是什么意思?

ThreadPool 上几乎所有 2000 个挂起的工作线程(不是正常操作!)都有类似于以下的堆栈:

0:027> !dumpstack
OS Thread Id: 0x1638 (27)
Child-SP         RetAddr          Call Site
000000001d34df58 0000000077d705d6 ntdll!ZwDelayExecution+0xa
000000001d34df60 000006427f88901d kernel32!SleepEx+0x96
000000001d34e000 000006427f454379 mscorwks!DllCanUnloadNowInternal+0xf53d
000000001d34e080 000006427fa34749 mscorwks!CreateApplicationContext+0x41d
000000001d34e0e0 0000064280184902 mscorwks!ReOpenMetaDataWithMemory+0x1ff59
000000001d34e290 0000064280184532 Company_Common_Diagnostics!Company.Common.Diagnostics.BufferedStream.Write(Byte[], Int32, Int32)+0x1b2
000000001d34e300 00000642801831fd Company_Common_Diagnostics!Company.Common.Diagnostics.XmlRollingTraceListener+TraceWriter.Write(System.String)+0x52
000000001d34e350 00000642801b3304 Company_Common_Diagnostics!Company.Common.Diagnostics.XmlRollingTraceListener.InternalWrite(System.Text.StringBuilder)+0x3d
000000001d34e390 0000064274e9d7ec Company_Common_Diagnostics!Company.Common.Diagnostics.XmlRollingTraceListener.TraceTransfer(System.Diagnostics.TraceEventCache, System.String, Int32, System.String, System.Guid)+0xc4
000000001d34e410 00000642801b2f59 System_ni!System.Diagnostics.TraceSource.TraceTransfer(Int32, System.String, System.Guid)+0x2ec

不是真正的答案,而是需要检查的东西......

确保您尚未在跟踪源中注册 DefaultTraceListener。 如果你不明确clear or remove the 默认跟踪监听器它可能仍然存在。这默认跟踪监听器 's 线程安全财产回报false,在这种情况下,System.Diagnostics.Trace 类会创建一个lock()周围的跟踪事件()打电话..

只是需要注意一些事情。

更多信息:

TraceListener.IsThreadSafe 属性 http://msdn.microsoft.com/en-us/library/system.diagnostics.tracelistener.isthreadsafe.aspx

IsThreadSafe 的值用于确定在写入监听器时是否使用全局锁。如果 IsThreadSafe 的值为 false,则无论 UseGlobalLock 的值如何,都将使用全局锁。仅当 IsThreadSafe 的值为 true 并且 UseGlobalLock 的值为 false 时,才不会使用全局锁。默认行为是在写入侦听器时使用全局锁。

谢谢, 亚伦

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

WinDbg——TraceListener 和饱和线程池 的相关文章

  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 有没有一种简单的方法可以让 Visual Studio 2015 使用特定的 ToolsVersion?

    使用特定版本构建项目或解决方案时msbuild我可以使用以下命令选择早期的 net 工具链 toolsversion or tv switch C Program Files x86 MSBuild 14 0 bin msbuild tv
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使
  • 使用 JSON.net 反序列化

    我对 json JSON net 等都很陌生 在这里阅读类似的问题后 我无法让我的代码工作 我的错误到底是什么 我监督了什么 出于测试目的是否可以跳过 链接 和 元 类 或者我是否必须定义每个属性 我得到以下 REST 输出 codes h
  • smtpclient“发送邮件失败”

    这是我的代码 for int i 0 i lt number i MailAddress to new MailAddress iMail to MailAddress from new MailAddress iMail from iMa
  • 将对象列表添加到 ef 中的上下文

    是否可以在不使用 foreach addObject 的情况下将对象列表添加到实体框架中的 Context 感谢帮助 从 EntityFramework 6 开始 您可以使用DbSet AddRange 方法 IEnumerable htt
  • DLL 中的 GUID (.Net)

    我在这方面不是很有经验 所以我有几个问题 首先 所有 Net 创建的 DLL 是否都有自己的 GUID 如果没有 我的问题是如何获得一个并将其与 DLL 关联 那么问题是 我如何获得该 dll 的 GUID 即 给定 DLL 路径 c so
  • 将日期时间转换为指定格式

    我有这个日期格式yy MM dd HH mm ss ex 12 02 21 10 56 09 问题是 当我尝试使用以下代码将其转换为不同格式时 CDate 12 02 21 10 56 09 ToString MMM dd yyyy HH
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • 在 Windows CE 6.0 与 Windows Mobile 6.1 下进行开发的权衡是什么

    我有一个 Windows NET 应用程序 我计划将其 移植 并定制为移动设备 该应用程序由一个独立的 NET 程序组成 该程序与条形码扫描仪配合使用 具有简单的 UI 并将扫描结果记录到文件中 还有一个 Windows 服务 可以使用 W
  • 使用 C# 动态创建按钮并按预定义的顺序放置它们

    NET 4 5 C 创建 Windows 窗体 我想动态创建和添加按钮并为其分配单击事件 但希望它们以特定的方式动态放置 就像图像一样 我的问题是如何以上述方式动态放置按钮 即 4x4 格式 一行 4 个按钮 4 列 但行数不受限制 是否可
  • 使用 .Net 创建 CalDAV 服务

    我想在我的应用程序中创建一个外部用户可以查看的日历 CalDAV 基本上是 WebDAV iCalendar 格式似乎得到了相对广泛的支持 尽管某些客户端 例如 Outlook 不太支持这种格式 不过对我来说完全是新的 我想外部发布事件 我
  • .NET 紧凑框架中的信号量

    不幸的是 使用 NET Compact Framework 时 System Threading 中没有信号量 我不确定为什么会这样 有人有想法吗 经过谷歌搜索后 我发现很多人给出了他们自己的实现 但他们中没有一个真正工作得很好 或者根本没
  • 在实体框架 6 中使用 SqlQuery>

    我正在尝试在 EF 6 中执行 SQL 查询 select查询返回两个字符串列 例如select a b 并且可以有任意数量的行 我想将结果映射到字典 但我无法摆脱以下错误 错误 1 无法将类型 System Data Entity Inf
  • 如何将 DateTime 格式化为 Web UTC 格式?

    我有一个日期时间 我想将其格式化为 2009 09 01T00 00 00 000Z 但是下面的代码给了我 2009 09 01T00 00 00 000 01 00 两行 new DateTime 2009 9 1 0 0 0 0 Dat
  • 未将对象引用设置为对象的实例 - 如何在异常中查找有问题的对象名称?

    这是我编程存在的祸根 部署应用程序后 当出现此错误时 没有多少调试转储可以告诉您哪些对象未实例化 我有调用堆栈 这很棒 它大致告诉我对象在哪里 但是有没有办法让 NET 告诉我对象的实际名称 如果你在调试时发现它们 程序当然会在有问题的生物
  • 使用 Rhino Mocks 存根只读属性

    我有一个带有私有集属性的类 我想用犀牛模拟来消除它 但是 当我尝试执行此操作时 它会出现编译时错误 提示我无法设置只读属性 我是使用 Rhino Mocks 的新手 所以我一定在这里遗漏了一些东西 public Interface IFoo
  • 如何向 UWP 项目添加 .NET dll 引用?

    我有几个适用于 NETv4 x 的 NET dll 项目 我将版本更改为 4 6 1 并重新构建 没有出现问题 当我尝试从 UWP 项目向它们添加引用时 出现错误 项目的目标是 NETCore 而文件引用的目标是 NET框架 这不是受支持的
  • 如何从当前 .NET 表单/应用程序发送密钥 F12

    我非常确定以下按钮激活的表单代码应该在我的 C 应用程序中引发 Control F12 SendKeys F12 但它似乎并没有继续进入 Windows shell 并激活另一个正在侦听它的程序 我的键盘可以用 看起来发送键在某处被拦截 并
  • __FUNCTION__ 宏的 C# 版本

    有人对 C FUNCTION 宏的 C 版本有好的解决方案吗 编译器似乎不喜欢它 尝试使用这个代替 System Reflection MethodBase GetCurrentMethod Name C 没有 LINE or FUNCTI

随机推荐

  • 我们如何从Google Direction API默认获得从A点到B点的最短距离路线

    我们如何从 Google Direction API 建议的替代路线中默认获得从 A 点到 B 点的最短距离路线 默认情况下 它会根据当前的交通状况为我们提供最短持续时间的路线 我注意到 如果您打开 provideRouteAlternat
  • 使用和不使用 Set 关键字之间的类型差异

    我刚刚解决了一个问题 我将 Set 关键字放在定义行中 但我想知道的是 为什么 基本上 我正在这样做 Dim startCell iCell as Range For Each iCell in Range whatever If iCel
  • 什么是*确定性并发*?

    我听说有3种并发 确定性并发 消息传递并发 共享状态并发 我知道 2 演员模型 和 3 通用线程 但不知道 1 那是什么 确定性并发是一种并发编程模型 在此模型中编写的程序具有以下属性 对于给定的一组输入 程序的输出值对于任何执行计划都是相
  • C++ typedef 类的使用

    为什么要使用一个typedef class Name 我在IBM C 文档 http publib boulder ibm com infocenter comphelp v7v91 index jsp topic com ibm vacp
  • powershell 鼠标移动不会阻止空闲模式

    System Windows Forms Cursor Position New Object System Drawing Point pos X pos Y 1 System Windows Forms Cursor Position
  • OpenCV 全屏窗口

    我正在尝试使用 opencv 2 3 创建一个全屏窗口 但它不起作用 但我记得 它应该起作用 代码非常简单 cvNamedWindow 名称 CV WINDOW FULLSCREEN 我也尝试设置窗口属性 cvSetWindowProper
  • AWS API Gateway DynamoDB GetItem 没有排序键?

    我有一个 Dynamodb 表 其中包含以下内容 primary key S series sort key S type of brokers title S Types Of Brokers primary key S series s
  • Jquery Datatables - 使整行成为链接

    这也许很简单 但似乎无法弄清楚 使用 jquery 数据表如何使每一行可单击以链接到普通页面 因此 如果有人将鼠标悬停在任何一行上 则整行将突出显示并可单击 并链接到我希望它在单击时链接到的任何网址 我用过fnDrawCallbackjQu
  • Oracle 变异触发器

    我正在编写一个简单的触发器 它应该只发送一条消息 其中包含更新的行数以及性别的旧值和性别的更新值 然而 当我运行更新时 我收到错误 表明表正在发生变化 并且表可能无法看到它 但我不确定为什么 trigger create or replac
  • 如何设置 Pyomo 求解器超时?

    如何设置 Pyomosolve 方法的超时 更具体地说 告诉 pyomo 在 x 秒后 返回当前找到的最优解 所以我能够通过 pyomo 文档找到答案 我认为分享会有所帮助 设置 Pyomo 的超时时间solve method solver
  • 非对称密钥容器的相互转换(例如:X.509、PGP、OpenSSH)

    非对称加密密钥基本上可以在主要密钥容器格式之间相互转换吗 例如 我可以将 X 509 密钥文件转换为 PGP 或 OpenGPG 密钥文件吗 并且 假设答案是肯定的 以任何格式保存一对密钥并转换为该场合所需的任何容器文件格式是否 安全中立
  • 如何在emacs语义中包含标准jdk库?

    我使用的是 Emacs 23 2 这是我加载语义的方式 setq semantic default submodes global semantic idle scheduler mode global semanticdb minor m
  • R中glmnet中的岭回归;使用 glmnet 包计算不同 lambda 值的 VIF

    我有一组多重共线性变量 我正在尝试使用岭回归来解决这个问题 我正在使用glmnetR 中的包 alpha 0 用于岭回归 library glmnet 我有一系列 lambda 值 并且我通过 cv glmnet 选择最佳 lambda 值
  • ListView 列的最小宽度

    我怎样才能指定MinWidthWPF 中的 Listview 列 此代码使用 Thumb 控件 它将阻止用户仅将标题拖动到指定的宽度 将其添加到您的 WPF 中
  • 如何在 React 中实现 Cloudinary 上传小部件?

    我正在尝试在我的 React 应用程序中使用 Cloudinary 上传小部件 但我遇到了问题 运行项目时 上传小部件会立即出现 但是当关闭并再次打开时 应用程序崩溃并显示以下消息 widget open 不是一个函数 Note 上传工作正
  • 如何使用异步回调进行同步操作?

    如何用异步函数进行同步操作 class MyClass static let shared MyClass let operationQueue OperationQueue let dispatchGroup DispatchGroup
  • 隐式转换的 gcc 警告标志

    我最近遇到了一个与下一个类似的错误 double getSomeValue return 4 0 std string str str getSomeValue 正如您所看到的 很容易发现问题 但在大型代码库中getSomeValue 与调
  • 如何在CSS中动态调整图像大小?

    我有一个简单的 html css 页面 上面有 3 个图像 我试图根据浏览器窗口的大小调整页面大小 现在 我在一个 div 中有 3 个图像 其高度设置为周围容器的百分比 并且图像设置为 height 100 和 width auto 现在
  • 在 Ruby 中向类添加实例变量

    如何将实例变量添加到已定义的类中runtime 然后从类外部获取并设置其值 我正在寻找一种元编程解决方案 它允许我在运行时修改类实例 而不是修改最初定义该类的源代码 一些解决方案解释了如何在类定义中声明实例变量 但这不是我要问的 Ruby
  • WinDbg——TraceListener 和饱和线程池

    我有一个多线程 NET Windows 服务 它间歇性地挂起 可能每两周 24 7 运行一次 当发生挂起时 线程池完全饱和 因为对我们的自定义跟踪侦听器的调用由于某种原因开始阻塞 根据 Windbg 的说法 有问题的代码中没有任何锁 也没有