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

标签 google-chrome garbage-collection chromium v8

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

我们在 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 相关的数据,尽管终端窗口中的数据很丰富(您可以在运行应用程序根本没有流捕获)。

我们假设 V8 的一个新进程正在运行,并且它的输出不会定向到 stdout,尽管它会在某种程度上打印到控制台本身。

V8 C++ 代码没有显示出这种奇怪的重定向的标记,相当干净的标准代码,事实上,我们可以毫无问题地记录 node --trace-gc script.js 的 gc 输出标准输出/标准错误。 Chrome 似乎添加了不良行为。

问题如何在 Windows 和 MacOS X 上将 Chrome GC 相关数据记录到文件中。

部分、 Not Acceptable 解决方案在基于 POSIX 的系统上,我们可以使用 script 命令获取所有终端输出。转储包含我们需要的所有数据,但该解决方案不涵盖 Windows 场景(我们确实需要在 Windows 上进行测试),事实上它并没有解决问题,也没有解释缺少数据背后的原因,它只是隐藏了问题。

最佳答案

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

  1. 实际重定向的唯一输出与 Chrome 相关。我的意思是,如果我们将 stderr 重定向到一个文件,我们可以看到该文件中的错误,但只有 Chrome 的错误,而不是 V8 的错误。
  2. 我想使用 script 命令,因为我尝试了 Powershell Start-TranscriptTee 和其他一些选项。事实证明(这并不奇怪)Windows 没有可用于达到所需效果的命令(AFAIK)。所以我使用了 Babun ( http://babun.github.io/ ),它基本上是预先配置的 Cygwin。没有显示 GC 日志。只有 Chrome 的相关内容。我认为 V8 的日志没有被转发到 Cygwin。

更新:
此问题可能与以下内容有关:

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

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

关于google-chrome - 将 Chrome/V8 --trace-gc 输出写入文件 - stdout 重定向不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51382711/

相关文章:

java - 替换 Java 中的 Finalize()

node.js - Puppeteer chrome 允许多个文件下载

html - 分页后打印时不分页

javascript - 可以在 Chrome 的 JavaScript 中获取 V8 JavaScript 引擎版本号

javascript - 在 Chrome 中将对象记录到控制台的解决方法

javascript - 重新加载时 Chrome 中的垂直居中页面 "jumping",FF 和 IE 工作正常

java - GC问题: array of 10 ints a single object or 10 objects?

java - 了解 Android GC 消息

javascript - 将 Angular 书面扩展迁移到 list V3

google-chrome - Curl 有效但 Postman 无效