【问题标题】:Using child_process.exec in Google Functions is very slow and random在 Google Functions 中使用 child_process.exec 非常缓慢且随机
【发布时间】:2020-04-09 00:49:11
【问题描述】:

我正在尝试以相当安全和可控的方式执行任意用户提供的代码。我一直在 Google Cloud Function 中使用 child_process.exec。

但是,我发现执行时间可能会有很大差异。

直接在 Cloud Function 中运行单个 console.log,而不是在 Cloud Function 中的 child_process.exec 中运行,会导致 500-4000 毫秒的执行时间开销。

这两者似乎有点疯狂:

  1. 变化如此之大。
  2. 在单独的线程中运行可能需要多花 4 秒以上的时间。

我猜这是因为它们本质上只是将一个线程分配给 Cloud Function,而我的进程必须等待该机器上的另一个线程释放。

我能做些什么来解决这个问题吗?

更新:

所以我能够始终如一地重现这一点。当依赖关系为中/大时,这肯定会导致 require 语句在 child_process.exec Cloud Functions 中花费一段时间。

最初只需要使用 Mocha 执行空单元测试即可重现。

但我创建了一个完整的仓库来更好地重现它here

还有一篇关于我的结果的博文here

如果有人能解释一下,我很感兴趣。

【问题讨论】:

标签: node.js google-cloud-platform google-cloud-functions


【解决方案1】:

目前,问题似乎是 require 在 child_process.exec 调用中调用中/大型依赖项,有时可能需要一段时间。

不知道为什么。

Cloud Run 没有这个问题。

但我创建了一个完整的仓库来更好地重现它here

还有一篇关于我的结果的博文here

如果有人能解释一下,我很感兴趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2014-09-03
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    相关资源
    最近更新 更多