【发布时间】: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