我们正在开发一种用于内存性能监控的自动化系统。
我们在Windows 7和MacOS High Sierra上使用正确的标志qazxsw poi启动Chrome。
输出打印并在控制台上可见。但是,使用标准流重定向捕获输出不起作用:
我们做什么:
MacOS X:--trace-gc --trace-gc-verbose
Windows:./Google\ Chrome --js-flags="--trace-gc --trace-gc-verbose" > log.txt 2>&1
写入日志文件的内容只是您在屏幕上看到的内容的一部分:文件中缺少所有与gc相关的数据,尽管终端窗口中有很多(您可以在没有流的情况下运行应用程序时看到所有数据)捕获所有)。
我们假设运行了一个新的V8进程,它的输出没有定向到stdout,尽管它有点被打印到控制台本身。
V8 C ++代码没有显示这种奇怪的重定向,非常干净的标准代码的标记,实际上可以记录chrome --no-sandbox --js-flags="--trace_gc --trace_gc_verbose" > log.txt 2>&1
的gc输出而没有标准stdout / stderr的任何问题。 Chrome似乎添加了不受欢迎的行为。
询问如何在Windows和MacOS X上将Chrome gc相关数据记录到文件中。
基于POSIX的系统的部分,不可接受的解决方案,我们可以使用node --trace-gc script.js
命令获取所有终端输出。转储包含我们需要的所有数据,但解决方案不包括Windows方案(我们确实需要在Windows上进行测试),事实上它并没有解决问题,也没有解释缺乏数据背后的原因,它只是隐藏了问题。
我认为有两件事值得指出。
script
命令,因为我尝试了Powershell script
,Start-Transcript
和其他一些选项。事实证明(这里没有意外)Windows没有可用于实现预期效果的命令(AFAIK)。所以我使用Babun(Tee
),它基本上是预先配置的Cygwin。没有显示GC日志。只有Chrome的相关内容。我认为V8的日志没有转发给Cygwin。更新: 这个问题可能与这些有关:
更新: 我创建了一个以下错误:http://babun.github.io/ 它似乎被注意到,有人会照顾它。
更新:
看起来ChromeDriver可以完全满足我们的需求 - https://bugs.chromium.org/p/chromium/issues/detail?id=865876#c3
另一个解决方法是使用http://chromedriver.chromium.org/logging/performance-log运行Chrome并定期调用--enable-precise-memory-info
,但该命令不能为我们提供与ChromeDriver几乎一样多的数据