代码之家  ›  专栏  ›  技术社区  ›  Kamarey

从命令行运行垃圾收集器?[关闭]

  •  12
  • Kamarey  · 技术社区  · 14 年前

    是否可以从命令行运行.NET垃圾收集器(例如,不编写代码)?

    编辑:

    How to request JVM garbage collection (not from code) when run from Windows command-line

    因此,如果有一种方法可以在JVM中实现这一点,那么就没有理由认为它不存在于.NET中

    4 回复  |  直到 8 年前
        1
  •  33
  •   Christian.K    4 年前

    有一个选择,虽然我不知道这是否是“安全生产”。也就是说,我不知道目标进程崩溃的风险有多高。但如果用于故障排除和/或分析,它可能会派上用场。

    PerfView

    PerfView.exe ForceGC [ProcessName | Process ID]
    

    PerfView.exe /?

    用法:PerfView ForceGC进程

    强制指定进程上的GC

    参数: GC。 ...

    PerfView.exe但是会将大量可执行文件转储到 %APPDATA%\PerfView\_version_

    所以,一旦你运行了PerfView.exe命令,您可以调用 HeapDump.exe 手动工具(在我的x64盒上,进程ID为15396):

    cd C:\Users\MyUserName\AppData\Roaming\PerfView\VER.2014-02-04.09.06.52.000\AMD64
    HeapDump.exe /ForceGC 15396
    

    示例输出如下所示:

    Loading the ETWClrProfiler.
    Turning on debug privilege.
    Highest Runtime in process is version v4.0.30319
      0,0s: Trying to attach a profiler.
      0,1s: Done Attaching ETLClrProfiler ret = 0
    Attached ETWClrProfiler.
      0,1s: Enabling JScript Heap Provider
      0,1s: Enabling EtwClrProfiler
      0,1s: Enabling CLR GC events
      0,1s: Requesting a JScript GC
      0,1s: Requesting a DotNet GC
      4,0s: .NET GC Starting at 0,15s.
      4,0s: .NET GC stats, at 0,16s Survived 2221152.
      6,0s: .NET GC complete at 0,17s.
      6,0s: Triggered .NET GC,  No JScript heap detected
      6,1s: Requesting ETWClrProfiler unload.
      6,1s: Shutting down ETW session
    [  6,1s: Done forcing GCs success=True]
    

    请注意,以上内容可能不是该工具的正式使用,可能会停止使用新版本。当然,PerfView可以做的不仅仅是强制GC(启动) here

    在内部,上面使用 ICorProfilerInfo::ForceGC CLR附带的分析接口/方法( source

    更新 :PerfView现在就是这样 open source is part of it . 以防你好奇。

    更新 my own

        2
  •  10
  •   Community CDub    8 年前

    垃圾收集器在进程内部运行。因此,如果要为此进程运行垃圾收集器,可以尝试 GC.Collect

    还要注意强制垃圾收集(使用 GC.Collect )方法是 considered as bad practice 应该避免。


    没有微软的工具,我从来没有听说过任何第三方工具能够做到这一点。每个进程都有自己的GC堆,因此也有自己的GC线程,因此在另一个进程AFAIK上强制GC收集是不可能的。

        3
  •  3
  •   ewassef    11 年前

    JetBrains dotTrace允许您在附加到进程并捕获其跟踪时调用垃圾回收。所以有一种方法。。。 http://www.jetbrains.com/profiler/

        4
  •  2
  •   Mel    14 年前

    此工具允许您强制垃圾回收。。它必须在你想要使用的过程之前启动-所以它不完全是你想要的。

    http://www.yourkit.com/dotnet/download/index.jsp

    http://www.yourkit.com/docs/index.jsp