背景
该服务是一个简单的 Go 程序,它将文件从 Cloud Storage 传输到浏览器。
在我的 Macbook 上一切正常,但在 Cloud-Run(托管)上无法满足某些请求。大多是大型 mp4 文件。
问题
日志仅显示500
状态,浏览器也是如此。但我的服务除了开始复制文件之外不记录任何内容。没有 IO 错误或任何错误。
此消息在状态之前 4 秒显示500
:
Container Sandbox Limitation: Unsupported syscall membarrier(0x10,0x0,0x0,0x8,0x775dce0b030,0x775dce0b000). Please, refer to https://gvisor.dev/c/linux/amd64/membarrier for more information.
我无法在本地重现此内容。使用相同的配置和 GCP 存储桶在本地运行良好。
该服务在 Cloud-Run 上运行良好,处理较小的文件(例如图像)。只是不是我尝试过的视频。
我试过了
将所有内容记录到io.Copy
. 没有错误,调用后挂起io.Copy
。
增加容器的内存。现在已经运行1G了。与 512M 没有变化。
使用相同的配置、相同的凭据在本地 Docker 容器中运行。没问题。
在 Twitter 上联系 GCP
更新2019-08-16
我创建了一个非常简单的服务,将“A”打印到 http 响应编写器。它在本地也能完美运行,但在云运行时返回 500 且尺寸较大。1MB OK、5MB OK、50 MB 失败、100MB 失败等。此服务运行时没有 membarrier 消息。
代码可在此处获取:https ://github.com/andrioid/reproduct-cloud-run-bug
也在问题跟踪器上报告:https ://issuetracker.google.com/issues/139511257
更新 2:可能的原因
响应大小似乎有 32MB 的硬性限制。
https://cloud.google.com/run/quotas
非常令人失望的是,这个值无法增加,并且错误没有提到这个限制,日志文件也没有提到。
相关分类