将Chrome / V8 --trace-gc输出写入文件 - stdout重定向不起作用

问题描述 投票:4回答:1

我们正在开发一种用于内存性能监控的自动化系统。

我们在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上进行测试),事实上它并没有解决问题,也没有解释缺乏数据背后的原因,它只是隐藏了问题。

google-chrome garbage-collection chromium v8
1个回答
1
投票

我认为有两件事值得指出。

  1. 实际被重定向的唯一输出是与Chrome相关的。我的意思是如果我们将stderr重定向到文件,我们可以看到此文件中的错误,但只有Chrome的错误不是V8的错误。
  2. 我想使用script命令,因为我尝试了Powershell scriptStart-Transcript和其他一些选项。事实证明(这里没有意外)Windows没有可用于实现预期效果的命令(AFAIK)。所以我使用Babun(Tee),它基本上是预先配置的Cygwin。没有显示GC日志。只有Chrome的相关内容。我认为V8的日志没有转发给Cygwin。

更新: 这个问题可能与这些有关:

  1. Chrome产生了许多进程,从我从日志中可以看到 - GC日志是从子进程收集的(与打开的终端窗口相关的PID不同)。我不知道这一点如何影响STDOUT重定向。这只是我注意到的一个事实。
  2. 我发现一个应用程序可能知道它的STOUD是否被重定向并且处理这种情况的方式不同 - e。一世。当STDOUT被重定向到文件时使用缓冲区而不刷新,但是如果它被打印在控制台上则没有。

更新: 我创建了一个以下错误: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几乎一样多的数据

© www.soinside.com 2019 - 2024. All rights reserved.