Google App Engine上的Pub / Sub以~100%CPU

时间:2018-01-26 00:16:48

标签: python google-app-engine google-cloud-pubsub app-engine-flexible

我一直在尝试测试我要在App Engine上设置的项目。由于机密性,我无法指定我的确切代码,但它在教程之间进行了自定义:Scalable Video TranscodingGithub)和Using Cloud Pub/Sub with PythonGithub

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

测试服务本身效果很好。我正在使用的媒体在工作服务中进行了转码,并返回到我的云存储中。

问题是,在启动一小时后,无论我是否排队任何任务,每个工作器实例都会开始提升到99-100%的CPU使用率。当我SSH到一个实例时,psqworker就是原因。这在App Engine上非常糟糕,因为它想要扩展并添加更多实例(在启动一小时后反过来也会这样做)。我试图浏览Stackdriver日志,但无法找到任何明显的原因。

我也不确定为什么Ruby也在CPU上运行,如截图所示。它的意思是基于谷歌的python图像的自定义灵活运行时。

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

One of the instances running top, showing the high CPU usage

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使用情况的屏幕截图: Screenshot

1 个答案:

答案 0 :(得分:0)

在与其中一位开发人员联系后,结果显示CPU使用率是由于Linux上的grpc库存在的一些问题以及它们的源是如何分发的。

Workaround found in Github issue

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

在我的Dockerfile中,我在安装了其他要求之后添加了该行,如教程中所示:

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

CPU问题似乎已得到解决。