【发布时间】:2018-04-12 17:55:47
【问题描述】:
我正在运行一个 Google Cloud Compute VM 作为我的应用程序服务器,该应用程序可在 iOS 和 Android 上使用。服务器在 uWSGI 中运行 Django,前面是 nginx。 uWSGI 和 nginx 之间的通信是通过一个 unix 文件套接字进行的。
最近我开始注意到客户端超时。我做了一些实验,发现 uWSGI 在将数据写入文件套接字时有时会出错。当我在客户端增加'max-time'参数时,它会顺利通过。例如,一个返回大约 200KB json 数据的示例请求,Django 需要大约 1 秒来计算。但是 UNIX 套接字似乎又需要 1-2 秒,这对于 200KB 的响应来说似乎太高了。如果客户端期望在 2 秒内得到响应,这通常会导致 uWSGI 出现写入错误(如下面的屏幕截图所示)。当我在客户端增加超时时,它会顺利通过。
我想知道是否有一些配置更改可以加快 UNIX 套接字上的读写速度。 200KB 对于来自我的服务器的 JSON 响应来说是一个非常小的大小 - 所以我无法将其降低。而且出于业务原因,我的客户端(iOS 或 Android)的超时时间不能超过 2 秒。
【问题讨论】:
-
第一步是优化配置你的 uWSGI,因为这是写入和从套接字写入。根据负载和系统架构,您可能希望运行多个线程或多个 uWSGI 工作者。接下来,您将告诉 Nginx 使用 epoll 或类似的东西,并配置您的 uwsgi 参数,例如 keep_alive、超时、缓冲区、send_file 块大小等。
标签: nginx uwsgi unix-socket