Pub/Sub Google App Engine 运行速度约为 100% CPU

Pub/Sub on Google App Engine runs at ~100% CPU

我一直在尝试测试我要在 App Engine 上设置的项目。由于保密原因,我无法指定我的确切代码,但它是在教程之间定制的:Scalable Video Transcoding (Github) and Using Cloud Pub/Sub with Python (Github)

本质上,它运行一个带有 Flask 的 App Engine 服务来处理通过 psq 将任务排入队列的传入请求,以及一个运行 psqworker 来执行任务的辅助服务。

测试服务本身运行良好。我使用的媒体在工作人员服务中被 t运行 编码并返回到我的云存储。

问题是,在启动一个小时后,无论我是否对任何任务进行排队,每个工作实例都开始增加到 99-100% CPU 使用率。当我通过 SSH 进入一个实例时,psqworker 就是原因。这在 App Engine 上真的很糟糕,因为它想要扩展和添加更多实例(在启动一个小时后反过来执行相同的操作)。我试图查看 Stackdriver 日志,但找不到任何明显的原因。

我也不太确定为什么 Ruby 在 CPU 上也是 运行,如屏幕截图所示。它是一个基于 Google 的 python 图像的自定义灵活运行时。

我 运行 我的 Windows 机器上的本地服务,CPU 使用率没有飙升。

Dockerfile:

# The Google App Engine python runtime is Debian Jessie with Python installed
# and various os-level packages to allow installation of popular Python
# libraries. The source is on github at:
#   https://github.com/GoogleCloudPlatform/python-docker
FROM gcr.io/google_appengine/python

RUN apt-get -y update && apt-get install -y libav-tools

# Create a virtualenv for dependencies. This isolates these packages from
# system-level packages.
RUN virtualenv /env -p python3.6

# Setting these environment variables are the same as running
# source /env/bin/activate.
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

# Copy the application's requirements.txt and run pip to install all
# dependencies into the virtualenv.
ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt

# # Add the application source code.
ADD . /app

CMD mkdir /tmp/audio

# CMD honcho start -f /app/procfile transcoder
CMD honcho start -f /app/procfile worker monitor

在我注意到发生了什么之后 CPU 用法的屏幕截图:

联系其中一位开发人员后,发现 CPU 的使用是由于 Linux 上的 grpc 库及其源代码的分发方式存在一些问题。

Workaround found in Github issue

安装所需的包时,可以通过构建它而不是仅仅获取二进制文件来通过 pip 安装 grpcio 包来解决这个问题。

在我的 Dockerfile 中,我在安装教程中的其余要求后添加了以下行:

RUN pip install grpcio --ignore-installed --no-binary grpcio

CPU 问题似乎已解决。