我正在运行此PerfView命令:
PerfView.exe /Merge:true /zip:true /NoNGenRundown /NoClrRundown /KeepAllEvents /ThreadTime /DumpHeap /NoView /NoGui /MaxCollectSec:30 collect
但似乎即使我将/MaxCollectSec:30
定义为30秒,实际数据收集过程也没有停止并继续向PerfViewData.etl
文件添加数据
这是运行命令时打开的Perfview控制台窗口的输出:
VERBOSE登录:PerfViewData.log.txt
EXECUTING:PerfView / Merge:true / zip:true / NoNGenRundown / NoClrRundown / KeepAllEvents / ThreadTime / DumpHeap / NoView / NoGui / MaxCollectSec:30 collect
禁用Pre V4.0 .NET Rundown,输入“E”以启用V3.5进程的符号。
请勿关闭此控制台窗口。它会留下收藏!
键入S以停止收集,'A'将中止。
内核日志:C:\ PerfView \ PerfViewData.kernel.etl
用户模式日志:C:\ PerfView \ PerfViewData.etl
于12/07/2017 14:26:32开始收集
收集10秒:大小= 10.5 MB。
收集20秒:大小= 16.4 MB。
超过MaxCollectSec 30
所以这里是:Exceeded MaxCollectSec 30
但是继续写入etl文件。
我想向客户端发送一个Perfview命令来收集系统范围的数据,并将包含Perfview所有ETL文件的zip文件发回给我。目前命令并没有停止 - 有人知道为什么吗?我应该在命令中添加/删除什么,以便在30秒后自动停止?
答案 0 :(得分:3)
我知道它已经有一段时间了,但看起来/DumpHeap
开关是问题所在 - 如果你删除它,跟踪将按时完成。我检查了PerfView源代码,当选择DumpHeap时,会与GUI窗口进行一些交互:
if (parsedArgs.DumpHeap)
{
// Take a heap snapshot.
GuiHeapSnapshot(parsedArgs, true);
// Ensure that we clean up the heap snapshot state.
parsedArgs.DumpHeap = false;
}
您可以在perfview中创建描述问题的问题。