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