【问题标题】:What is the .NET equivalent of java's -verbose:gc command line optionjava -verbose:gc 命令行选项的 .NET 等效项是什么
【发布时间】:2010-10-14 14:15:19
【问题描述】:

我正在编写一个 ASP.NET MVC 应用程序,并且我看到我的一个操作看似随机的性能。我最初的想法是垃圾收集正在启动并暂停应用程序一段时间,但我似乎找不到可以证明或反驳我的理论的按钮/开关。

对于没有 Java 的人来说,-verbose:gc 是一个命令行开关,您可以将它传递给 Java 应用程序,当 GC 事件发生时以及需要多长时间时,它将使 JVM 打印出来。

我尝试过使用 vs2010 性能工具和 JetBrains dotTrace,这两者都有点像使用热核武器来破解小坚果。

【问题讨论】:

  • GC 需要多长时间并不是那么容易定义的。大多数 GC 不需要停止程序,因为 .net 在客户端应用程序上使用并发 GC。

标签: c# java .net performance garbage-collection


【解决方案1】:

在 .NET 4.0 中,Windows 事件跟踪 (ETW) 可为您提供您正在寻找的信息。这是针对GC 的一个。

仅供参考 ETW 速度非常快,并且内置在内核中。使用 ETW,您应该能够获得这样的信息

为了获取这些信息,BCL 团队提供了一个工具,称为 PerfMonitor

以下是使用该工具获取 GC 信息的步骤

  1. 以管理员身份启动 cmd 或 powershell , 这需要收集 ETW 追踪
  2. 启动所需的应用程序 追踪
  3. 发出命令“PerfMonitor.exe /process:4180 start” 其中 4180 是 进程ID
  4. 执行必要的操作
  5. 然后发出“PerfMonitor.exe stop”
  6. 获取报告的命令 “PerfMonitor.exe GCTime”。这会 生成报告并在 浏览器

我也有blogged差不多的

HTH

【讨论】:

    【解决方案2】:

    您的第一个猜测不应该是 GC。对于所有正常工作负载,您不会注意到 .NET 中的 GC。

    GC 没有 trace-switch,但如果你仍然认为 GC 是罪魁祸首,可以查看performance counters

    【讨论】:

    • 感谢您的工作。你说得对,这与 GC 无关,不容易:-)
    猜你喜欢
    • 2011-10-16
    • 2019-03-13
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 2011-04-29
    • 2018-12-01
    相关资源
    最近更新 更多