3

我正在运行这个 PerfView 命令:

PerfView.exe /Merge:true /zip:true /NoNGenRundown /NoClrRundown /KeepAllEvents /ThreadTime /DumpHeap /NoView /NoGui /MaxCollectSec:30 collect

但似乎即使我定义/MaxCollectSec:30为 30 秒,实际的数据收集过程也不会停止并继续将数据添加到PerfViewData.etl文件中

这是 Perfview 在运行命令时打开的控制台窗口的输出:

详细登录:PerfViewData.log.txt

执行:PerfView /Merge:true /zip:true /NoNGenRundown /NoClrRundown /KeepAllEvents /ThreadTime /DumpHeap /NoView /NoGui /MaxCollectSec:30 收集

Pre V4.0 .NET Rundown 已禁用,键入“E”以启用 V3.5 进程的符号。

不要关闭此控制台窗口。它将继续收藏!

键入 S 停止收集,'A' 将中止。

内核日志:C:\PerfView\PerfViewData.kernel.etl

用户模式日志:C:\PerfView\PerfViewData.etl

2017 年 12 月 7 日 14:26:32 开始收集

收集 10 秒:大小 = 10.5 MB。

收集 20 秒:大小 = 16.4 MB。

超过 MaxCollectSec 30

所以这里是:Exceeded MaxCollectSec 30但继续写入 etl 文件。

我想向客户端发送一个 Perfview 命令以收集系统范围的数据并将包含来自 Perfview 的所有 ETL 文件的 zip 文件发回给我。目前命令不会停止 - 有人知道为什么吗?我应该从命令中添加/删除什么,以便它在 30 秒后自动停止?

4

1 回答 1

3

我知道这已经有一段时间了,但看起来/DumpHeap开关是这里的问题 - 如果您将其移除,跟踪将按时完成。I checked the PerfView source code and when DumpHeap is selected there is some interaction with the GUI window:

if (parsedArgs.DumpHeap)
{
    // Take a heap snapshot.
    GuiHeapSnapshot(parsedArgs, true);

    // Ensure that we clean up the heap snapshot state.
    parsedArgs.DumpHeap = false;

}

您可能会在perfview中创建一个问题来描述您的问题。

于 2017-10-30T12:44:12.870 回答