【问题标题】:How to debug gunicorn and python in Google App Engine?如何在 Google App Engine 中调试 gunicorn 和 python?
【发布时间】: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


【解决方案1】:

基于 OP 的最新评论

我无法像我希望的那样调试问题,但问题确实是内存问题。在本地运行 python 应用程序时,我使用分析器来测量内存占用。然后我更改了代码以在单独的进程中运行一些内存密集型处理。在这些更改之后,我能够部署到 Google App Engine,而不会出现启动问题。

同样在类似的场景下也可以使用GCP profiler来监控App引擎的资源使用情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 2012-04-24
    • 2013-01-15
    • 2018-07-06
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多