无头铬 - 性能

Posted

技术标签:

【中文标题】无头铬 - 性能【英文标题】:Headless Chromium - performance 【发布时间】:2019-08-05 05:27:36 【问题描述】:

我一直在为 Headless Chromium 性能而苦苦挣扎。我的计划是以至少 30fps(甚至更高)的速度捕获加载的网站。但是,随着分辨率的提高,返回帧的频率会下降。

对于 720p 的窗口分辨率,只要将分辨率更改为 1080p,我就可以轻松达到 ~35fps,然后帧数下降到 ~20fps 甚至更低。 我在一台有 30 个 CPU 的机器上运行谷歌云计算引擎上的 chromium,这根本没有完全使用。

你们中有人遇到过类似的问题吗?

我的一些设置:

为了捕获帧,应用使用 Chrome 开发工具事件“Page.screencastFrame”。 谷歌云计算引擎 - 30CPU,30GB 内存 标志:-disable-translate --disable-extensions --disable-background-networking --safebrowsing-disable-auto-update --disable-sync --metrics-recording-only --disable-default-apps --no-first-run --remote-debugging-port=9222 --user-data-dir=/var/app/CHROME --disable-setuid-sandbox --window-size=1920,1080 --disable-gpu --hide-scrollbars --user-agent=true --remote-debugging-address=0.0.0.0 --no-sandbox --no-zygote --headless --autoplay-policy=no-user-gesture-required --disable-notifications --disable-logging --disable-permissions-api

【问题讨论】:

同样的问题。容器中的无头 Chrome 需要 117 秒,外部需要 8 秒。 @MortenB 问题解决了吗? 【参考方案1】:

我发现,如果我在静默期运行容器,它们会运行得更快,从 Gitlab-CI 装备转移到具有更快磁盘的机器会改善它。

容器的大小很重要(高山),您的容器主机上也有非常快的 SSD。在新设备上运行 alpine v3.10 容器和 chromium v​​77,我能够将时间从 117 秒减少到 43 秒,但是 Alpine 不是那么灵活,如果你必须编译东西,它几乎和 ubuntu 容器一样大。

【讨论】:

你能写出更多关于“静默期”的细节吗,这是什么意思? @mbutan:静默期只意味着系统负载很小,我的容器可以使用更多资源。我现在使用 chrome v85 和 v85 驱动程序,情况好多了。 @MorenB 你能达到 30fps 的 1080p 内容吗?即使系统有很多免费资源,我仍然在屏幕截图性能上苦苦挣扎。我可以询问您的系统规格以及您得到的结果吗? @mbutan:我在我的 Ryzen7 2700x/16GB/4x250GB ssd striped 上进行了本地尝试,在 1920x1080 窗口大小下我得到了大约 20fps。它在无头模式下只使用一个核心,我相信它是 cpu bound。 @MorenB 正是它受到铬的某种限制,因为 CPU 资源在我的机器上也是免费的。

以上是关于无头铬 - 性能的主要内容,如果未能解决你的问题,请参考以下文章

ruby capybara.rb(无头铬)

为啥在像 STB 这样的嵌入式系统上,钴在 Youtube 中的性能比铬好得多?

在无头模式下运行 Chrome

使用铬和硒进行网络节流

淘汰赛 + 大数据集性能

大话性能测试---基础篇