gpt4 book ai didi

c# - .NET中进行事后分析的可能性有哪些(例如,程序崩溃后)?

转载 作者:太空狗 更新时间:2023-10-29 23:12:01 24 4
gpt4 key购买 nike

假设有一个C#程序,用作Windows服务。让我们假设服务已经变得疯狂,并且正在疯狂地消耗CPU和内存。由于它是生产系统,因此需要很快重新启动。因此,我没有太多时间来收集运行时信息。也许快速浏览一下任务管理器……仅此而已。

之后,我所拥有的只是log4net日志文件和Windows事件日志,用于事后分析。

假设我已经找到了问题的原因。有人修复了它,也许程序员添加了一些额外的日志记录,所以下次我可以更快地找到类似的问题。尽管如此:我仍然依赖于日志文件的质量,并希望下次问题会以某种方式在日志中重新出现。

还有其他方法可以进行事后分析吗?也许像线程转储(例如在Java中),内存转储之类的东西或其他东西可能有助于事后分析?也许某些内置的.NET框架工具可以帮助您?

我对真实的项目经验以及如何解决这个维护问题非常感兴趣,我认为这对于大多数程序员来说都是非常真实的。

最佳答案

正如Marc所说,WinDbg + SoS将使您调试很多问题,而您在Visual Studio中无法真正解决。有一些很棒的教程this blog

对于内存问题,您还可以查看Perfmon中的.NET性能计数器。您可以查看对象的位置(哪代)以及在垃圾回收上花费了多少时间。那应该给您一些有用的信息。如果您想知道为什么不收集对象,那么WinDbg和SoS是解决之道。要引导您完成一个简单的 session ,请执行以下步骤:

  • 使用!dumpheap -stat检查堆,查找大量实例。您可能对在任何给定时刻希望在堆中找到的内容有所了解,因此,如果有什么不寻常的地方,请调查一下。
  • 选择随机实例,然后在实例的地址上执行!gcroot。这将告诉您为什么未收集对象。
  • 重复

  • 可能使生存期更长的候选对象:事件,静态函数和终结器队列,仅举几例。

    您可能还想看看我对 this question的回答,以查看更多WinDbg内容。

    关于c# - .NET中进行事后分析的可能性有哪些(例如,程序崩溃后)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/455122/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com