AppEngine 警告 - OpenBLAS 警告 - 无法确定该系统上的 L2 缓存大小

Piz*_* eu 24 python google-app-engine google-cloud-platform plotly-dash

我尝试在 GC AppEngine 上部署应用程序。部署过程中没有错误,但应用程序无法运行(仅显示加载页面)。日志中唯一一个奇怪的原始日志

OpenBLAS WARNING - could not determine the L2 cache size on this system
Run Code Online (Sandbox Code Playgroud)

顺便说一句 - 它在我的本地机器上运行良好。
这是基于 Dash 框架的 python Web 应用程序

我的应用程序.yaml:

runtime: python37
service: service-name
instance_class: F2

entrypoint: gunicorn -b :$PORT main:app.server
Run Code Online (Sandbox Code Playgroud)

要求.txt:

Flask==1.0.2
dash==0.34.0
dash-html-components==0.13.4
dash-core-components==0.41.0
dash-table==3.1.11
gunicorn==19.9.0
google-cloud-pubsub==0.37.2
requests==2.21.0
pandas==0.23.4
Run Code Online (Sandbox Code Playgroud)

Dav*_*rez 28

我刚刚在 Pandas 和 Dash 上遇到了同样的问题,并发现了你的问题(希望它能给我一些启发)。被困了几个小时后,我找到了答案,回来分享:-)

如果您看到的唯一错误是 OpenBLAS 警告,则该应用很可能运行良好。调试这个问题几个小时后,我发现由于Dash和Pandas消耗了大量内存,F2实例无法正确处理Web应用程序,由于RAM内存不足而失败。请尝试在您的 YAML/JSON 配置文件中将您的实例更改为具有更多 RAM 内存的尽可能高的自动单元,然后它可能会起作用:

instance_class: F4_HIGHMEM
Run Code Online (Sandbox Code Playgroud)

编辑:Google App Engine 现在支持更多实例类型。检查实例类型的文档:标准实例

实例类型

此外,请记住,第一次运行此 Web 应用程序时,执行时间会更长。如果您检查日志,您会看到如下所示的几个提示。再等一会儿

此请求导致为您的应用程序启动一个新进程,从而导致您的应用程序代码首次加载。因此,与应用程序的典型请求相比,此请求可能需要更长的时间并使用更多的 CPU。

  • 我尝试让 1 个实例始终运行,但在启动方面没有发现太大差异。谷歌云已经实现了某种待机/热启动,这对我来说效果非常好。但是,如果您超过 2 小时没有任何请求,那么您将再次面临这 15 秒。我最终编写了一个谷歌云函数(类似于AWS lambda)的脚本,该函数每2小时执行一次并向服务器发出一个虚拟请求,因此它不会消失。这对我来说非常有效,因为它很便宜(这仍然在自由区) (2认同)

tim*_*tim 7

我个人通过给gunicorn添加超时来解决这个问题,因为默认超时只有30秒

entrypoint: gunicorn -b :$PORT main:app.server --timeout 120

当我尝试以下操作时,我找到了这个解决方案:

  • 从 F1 实例切换到 F4_1G 实例:仍然有相同的警告
  • 从 App Engine 标准环境切换到 App Engine 灵活环境(我强烈不推荐,因为应用程序引擎灵活实例未正确关闭(删除)可能会花费您很多钱:请参阅此处作为参考Google App Engine 灵活环境的定价,一个 500 美元的课程),16GB 内存和 4 个 CPU -> 最终得到了一个不同的警告“[CRITICAL] WORKER TIMEOUT”,这让我看到了这篇文章:Gunicorn worker timeout error,这就是我找到这个解决方案的地方。

现在我的应用程序运行良好,即使使用 F1 实例也是如此