【发布时间】:2018-07-17 13:31:32
【问题描述】:
我们正在开发一个用于内存性能监控的自动化系统。
我们在 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
窗户:
chrome --no-sandbox --js-flags="--trace_gc --trace_gc_verbose" > log.txt 2>&1
写入日志文件的内容只是您在屏幕上看到的一部分内容:文件中缺少所有与 gc 相关的数据,尽管终端窗口中有很多数据(运行时可以看到所有数据)完全没有流捕获的应用程序)。
我们假设一个新的 V8 进程正在运行,它的输出没有被定向到标准输出,尽管它在某种程度上被打印到控制台本身。
V8 C++ 代码没有显示出这种奇怪的重定向标记,非常干净的标准代码,实际上可以记录node --trace-gc script.js 的 gc 输出,而标准 stdout/stderr 没有任何问题。似乎 Chrome 添加了不良行为。
问题如何在 Windows 和 MacOS X 上将 Chrome gc 相关数据记录到文件中。
部分、不可接受的解决方案在基于 POSIX 的系统上,我们可以使用 script 命令获取所有终端输出。转储包含我们需要的所有数据,但解决方案不涵盖 Windows 场景(我们确实需要在 Windows 上进行测试),实际上它并没有解决问题,也没有解释缺少数据背后的原因,它只是隐藏了问题。
【问题讨论】:
-
完成投票:)
-
好像是stackoverflow.com/questions/3332045/…我会更新进度。
标签: google-chrome garbage-collection chromium v8