当前位置: 首页 > 知识库问答 >
问题:

限制chrome无头CPU和内存使用

司空实
2023-03-14
system "LC_ALL=C google-chrome --headless --enable-logging --hide-scrollbars --remote-debugging-port=#{debug_port} --remote-debugging-address=0.0.0.0 --disable-gpu --no-sandbox --ignore-certificate-errors &"

然而看起来chrome headless消耗了太多的内存和cpu,有人知道我们如何限制chrome headless的cpu/内存使用吗?或者有什么变通办法。

提前道谢。

共有1个答案

金英华
2023-03-14

关于Chrome无头会话不可预测的CPU和内存消耗,已经有很多讨论了。

根据“为最小CPU+MEM使用量构建无头”的讨论,CPU+内存使用量可以通过以下方式进行优化:

>

  • 使用自定义代理或C++协议处理程序,您可以返回存根1x1像素图像,甚至完全阻止它们。
  • Chromium团队正在为帧的生成添加编程控制。目前无头chrome仍在尝试以60 fps的速度渲染,这是相当浪费的。许多页面确实需要几帧(可能是10-20 fps)才能正确呈现(由于使用了RequestAnimationFrame动画触发器),但我们希望可以节省大量CPU。
  • 内存信息将帮助您确定哪个组件是安装程序中内存消耗最大的组件。
  • 用法可以是:

    $ headless_shell --remote-debugging-port=9222 --trace-startup=*,disabled-by-default-memory-infra http://www.chromium.org
    

    铬总是会使用尽可能多的资源。如果您想有效地限制它使用,您应该研究使用cgroups

    说完上面提到的几点,下面是一些在生产环境中运行无头浏览器时需要适应的常见最佳实践:

    图:无头Chrome的易失性资源使用情况

    我们应该只在绝对必要的时候运行一个,下一个最佳实践是通过每个浏览器只运行一个会话。虽然您实际上可以通过并行处理页面来节省一些开销,但如果一个页面崩溃,它可能会导致整个浏览器崩溃。此外,每一页都不能保证是完全干净的(cookie和存储可能会渗漏)。

    Page.WaitForNavigation:

    观察到的最常见的问题之一是触发页面负载的操作,以及脚本执行的突然丢失。这是因为触发pageLoad的操作通常会导致后续工作被吞噬。为了绕过这个问题,您通常必须调用page-loading-action并立即等待下一个pageLoad。

    可以有两个JavaScript运行时(节点和浏览器)。这对于共享性来说是很好的,但它以混乱为代价,因为某些页面方法将要求您显式地传递引用(而不是通过闭包或吊装来传递引用)。

    举个例子,当在协议的内部使用page.evaluate时,这实际上是stringe函数并将其传递到Chrome中,所以像闭包和吊装这样的事情根本就不起作用。如果需要将一些引用或值传递到evaluate调用中,只需将它们作为参数追加,即可得到正确处理。

    参考:运行200万个无头会话的观察

  •  类似资料:
    • 问题 你想对在Unix系统上面运行的程序设置内存或CPU的使用限制。 解决方案 resource 模块能同时执行这两个任务。例如,要限制CPU时间,可以像下面这样做: import signal import resource import os def time_exceeded(signo, frame): print("Time's up!") raise SystemEx

    • 问题内容: 可以说,钱不是限制因素,我想编写一个在一台功能强大的计算机上运行的Java程序。 目的是使Java程序 尽可能快地运行,而不必 为任何事情 交换或进入磁盘 。 假设这台计算机具有: 1 TB RAM(64个16GB DIMM) 64个处理器核心(8个8核处理器) 运行64位Ubuntu 运行在JVM中的Java程序的单个实例能否利用这么多的RAM和处理器? 是否有任何实际的考虑因素可能

    • 问题内容: 说“用cpu = 800和内存= 1024运行myApp.jar” 我从事Java编程已经很多年了,问这个问题很尴尬。我什至不知道这是否可能。如果是这样,怎么办? 我只想知道是否可以设置Java程序的最大内存和cpu使用率。我突然想到了这个,因为我最近开始开发移动应用程序。我想知道该应用程序在内存和处理器非常有限的设备上的表现。 我看到带有演示应用程序的物理引擎可以在浏览器上运行,也可

    • 问题内容: 我有点担心可以在共享计算机上使用的资源量。有什么方法可以测试管理员对我可以使用的资源量是否有限制?如果可以的话,为了提出更完整的问题,我该如何设置这种限制? 谢谢。 问题答案: 对于与流程相关的限制,您可以浏览一下(阅读文件中的注释,使用google或使用以获得更多信息)。而且正如jpalecek指出的那样,您可以用来查看(并可能修改)所有当前有效的限制。 您可以使用该命令查看磁盘配额

    • 本文向大家介绍Python限制内存和CPU使用量的方法(Unix系统适用),包括了Python限制内存和CPU使用量的方法(Unix系统适用)的使用技巧和注意事项,需要的朋友参考一下 问题 你想对在Unix系统上面运行的程序设置内存或CPU的使用限制。 解决方案 resource 模块能同时执行这两个任务。例如,要限制CPU时间,可以像下面这样做: 程序运行时,SIGXCPU 信号在时间过期时被生

    • 我是火花操作员的新手,我不知道如何在YAML文件中设置资源请求和限制,例如在我的情况下,我有驱动程序pod的内存请求512m,但限制呢,它是无界的? 规格:驱动程序:核心:1核心限制:200m内存:512m标签:版本:2.4.5服务帐户:火花