【问题标题】:Openshift online v3 - Timeout when reading response headers from daemon processOpenshift online v3 - 从守护进程读取响应标头时超时
【发布时间】:2017-11-15 23:41:31
【问题描述】:

我在 openshift online 上使用 python 图像创建了一个 python api。如果您请求所有数据,则需要 30 多秒才能响应。服务器给出 504 网关超时 http 响应。您如何配置响应的长度? > 我在路由上创建了注解,这似乎设置了代理超时。

haproxy.router.openshift.io/timeout: 600s

问题仍然存在,我现在开始记录。消息似乎来自 mod_wsgi。

我想尝试将 httpd(mod_wsgi-express 进程)的配置从 request-timeout 60 更改为 request-timeout 600。你在哪里配置这个。我正在使用基础镜像https://github.com/sclorg/s2i-python-container/tree/master/2.7

日志记录:

Timeout when reading response headers from daemon process  'localhost:8080':/tmp/mod_wsgi-localhost:8080:1000430000/htdocs

有人知道如何在 openshift online 上修复此错误

【问题讨论】:

  • 你在做什么工作需要这么长时间?听起来您不应该在 Web 请求的上下文中进行处理,而是将处理卸载到诸如 Celery 之类的任务排队系统。通过允许如此长时间运行的请求,如果您同时收到许多这样的请求,您将阻塞整个 Web 服务器,因为您将耗尽容量。
  • 我同意,这可能是未来的问题。现在它可以工作,因为每天最多发出 10 次请求,但将来可能会增加。这是一个 api 请求,需要在服务器端进行大量工作来生成数据。你的解决方案是什么?将工作卸载到 celery 并在完成后发送响应?
  • Celery 太少见了。但通常你会卸载到后台并返回排队的确认。然后让客户以某种方式轮询以检查是否完成。如果这对你有用,现在就去吧。唯一需要担心的是,这些超时将应用于所有处理的请求,这意味着对于短请求,如果它们开始卡住,您将失去 mod_wsgi 恢复的能力。如blog.dscpl.com.au/2014/02/…中所述,可以开始使用多个守护进程组并拆分流量。
  • 使用多个守护进程可能会在以后出现问题。然后可以解释如何使用 mod_wsgi-express 做到这一点。
  • 太好了,这个端点的守护进程听起来像是一个解决方案,我想知道它是如何工作的,会阅读你发给我的链接。我也在考虑另一种解决方案。数据库中的数据每天更改一次,我还可以生成所有可能的数据,并将其保存在文件中。并让 api 使用该文件。你喜欢什么。

标签: apache openshift mod-wsgi http-status-code-504


【解决方案1】:

下一步更改我的应用程序路由的 haproxy 超时

haproxy.router.openshift.io/timeout: 600s

我在我的 python 应用程序的 app.sh 中更改了请求超时和套接字超时。所以 mod_wsgi-express 服务器配置了更高的超时时间

ARGS="$ARGS --request-timeout 600"
ARGS="$ARGS --socket-timeout 600"

我的应用程序现在在取消请求前等待 10 分钟

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 2019-07-30
    • 2017-04-01
    • 2018-10-15
    • 2014-09-09
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多