【问题标题】:Debugging App Engine usage CPU requirements and amounts调试 App Engine 使用 CPU 要求和数量
【发布时间】:2020-03-25 01:31:29
【问题描述】:

我正在对应用程序引擎进行负载测试,因此我将其设置为使用默认类型的一个实例(即B1)。它有 256 MB 或 RAM 和 600 MHz 1 CPU 处理 (https://cloud.google.com/appengine/docs/standard)。

我有一个 nodejs 脚本,它运行一个在计时器上执行 1 次 MYSQL 查找查询的 php 脚本。目前,此计时器每秒检查四次。我想测试它可以支持多少用户,所以我将计时器除以不同的数量来模拟不同数量的用户会使用多少操作。

令我沮丧的是,我发现对于 5 个模拟用户,该实例以大约 80% 的 CPU 运行。这意味着应用程序每秒运行循环 40 次,这看起来就像每秒有 40 个 http 请求。我读过一个F1 服务器每秒可以支持7200 个请求,它与B1 服务器具有相同的规格。这是预期的高 CPU 使用率和/或我可以做些什么来调试它并可能使其更高效?

这里有更多关于程序流程的信息:

  1. 用户连接 socket.io 并加入房间

  2. 服务器在每秒运行 4 次的计时器上运行脚本。

  3. 该脚本使用child_process 运行一个php 脚本,该脚本对云SQL 服务器执行MySQL 查询,以确定是否有任何值得从MySQL 数据库收集的更新。 (现在我只是在测试没有任何更新,所以在这些测试中会跳过运行任何额外的查询。)

  4. php脚本向服务器返回JSON数据,服务器看到没有什么可做的了。

    通常脚本只会针对每种房间类型运行一次(无论用户数量如何),但为了测试服务器可以处理多少处理,我将计时器持续时间除以不同的数量,发现在频率的 5 倍时,服务器以 80% 的 CPU 运行。这在技术上暗示的是,如果不断有 4 条新消息,则 CPU 使用率预计约为 80%。这对我来说似乎很高。

所以,我现在想知道运行 php 脚本的 child_process 是否正在使用大量 CPU,因为它似乎是唯一可能使用这么多 CPU 的东西。欢迎提供见解或建议。

【问题讨论】:

    标签: php node.js google-app-engine child-process


    【解决方案1】:

    我了解到使用 F1 服务器可以支持每秒 7200 个请求,该服务器具有与 B1 服务器相同的规格。是否预期会出现如此高的 CPU 使用率和/或我可以做些什么来调试它并可能使其更高效?

    B1 与 F1 实例并不完全相同。虽然 B1 和 F1 确实具有相同的规格,但正如您所说的 here 对于 B1 实例,唯一支持的扩展类型是手动和基本的。

    换句话说,B1 实例是使用手动和基本扩展来扩展的,如果您没有在 app.yaml 中正确设置应用程序的预期,这可能会导致问题。

    如果您定义的实例数量较少并且出现流量高峰,那么您将独自面对已经生成的实例,导致它们接收所有流量,从而有效地增加 CPU 和内存使用率。

    我的建议是使用支持自动扩展的实例类。自动缩放不仅很好,因为您不需要设置对流量的确切预期,而且您可以定义 minimum number of instancemaximum number of instances,Google App Engine 将负责放大或缩小根据您的流量扩展实例。

    因此,这有助于减少所有已生成实例类的负载,这意味着与手动或基本扩展相比,CPU 和内存使用率更低,整体性能更好。

    另外,here 您将找到有关如何在 Google App Engine 标准中处理请求的文档,以及一些提示和最佳做法,以提高性能和稳定性。

    最后,如果您决定使用支持自动扩展的实例类,通过在创建新实例类之前加载应用程序的新副本,启用预热请求不仅有助于减少延迟,而且有助于提高代码的整体性能. Here你会发现更多关于预热请求的信息。

    希望对你有帮助。

    【讨论】:

    • 自动伸缩,如果一个F1实例只支持5个用户,那么最高的,(F4_1G)可能只支持4倍(20个用户),并且maxinstances的配额设置为8 ,这意味着我只能完全支持大约 160 个用户,所以我认为这不会解决它。我不认为我在脚本中使用了太多的处理能力,但显然我是。它从开始到运行带有数据库连接和单个查询的 php 脚本,再到用几行代码在 node.js 中处理响应,持续一个周期,每个用户秒执行 4 次
    • 如果你的设置真的消耗这么多,如果你使用自动伸缩,一旦 CPU 使用率或流量足够高,当使用自动伸缩时,Google App Engine 将生成另一个支持的实例为您的工作流程提供更多用户,只要您关注最大实例数,就可以扩展此功能。我所说的使用自动扩展的意思是,它不仅可以通过在不同的衍生实例类之间分配用户来帮助 CPU 使用,而且只要您的应用程序需要它,它还可以让您在没有任何问题的情况下进行扩展。
    猜你喜欢
    • 2015-02-04
    • 1970-01-01
    • 2012-09-14
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2017-01-27
    • 2016-01-13
    相关资源
    最近更新 更多