【发布时间】:2021-04-18 18:53:05
【问题描述】:
我正在 Google App Engine flex 中运行带有 gunicorn 的 python 3.7 应用程序。当应用程序启动资源密集型任务时,云日志中会记录以下内容,我可以看到该任务没有完成。
[INFO] 使用 pid: 46 引导工作人员
在这个thread 中提出了各种修复。正如线程中提到的,gunicorn 似乎没有记录工人被引导的原因。但是,据报道in a comment 可以使用 dmesg 来调试问题的原因。
我可以按照这些instructions 进入运行我的应用程序的容器。但是,在运行 dmesg 时出现错误:
dmesg: read kernel buffer failed: Operation not permitted
关于如何找到 gunicorn 工人被引导的原因的任何想法?可能是内存问题,但最好先验证原因。
这里是使用的 gunicorn 配置:
workers = 2
threads = 2
timeout = 7200
worker_class = "gthread"
loglevel = "debug"
我的 app.yaml 中针对 Google App Engine 的相关设置:
env: flex
manual_scaling:
instances: 1
resources:
cpu: 2
memory_gb: 12
disk_size_gb: 20
【问题讨论】:
-
内存不足是一个可能的原因。日志消息太多,很容易错过重要的消息。尝试仔细查看您的日志。
-
我无法像我希望的那样调试问题,但问题确实是内存问题。我使用profiler 来测量本地运行python 应用程序时的内存占用。然后我更改了代码以在单独的进程中运行一些内存密集型处理。在这些更改之后,我能够部署到 Google App Engine,而不会出现启动问题。
-
我认为您可以将评论移至答案以帮助他人,也可以使用GCP profiler 监控App引擎上的资源使用情况。
标签: python google-app-engine gunicorn