Nginx 如何使UNIX套接字更快?

Nginx 如何使UNIX套接字更快?,nginx,uwsgi,unix-socket,Nginx,Uwsgi,Unix Socket,我正在运行一个谷歌云计算虚拟机作为我的应用服务器,这个应用程序可以在iOS和Android上使用。服务器在uWSGI中运行Django,前面是nginx。uWSGI和nginx之间的通信通过unix文件套接字进行 最近我开始注意到客户端超时。我做了一些实验,发现uWSGI在向文件套接字写入数据时有时会出错。当我在客户端增加“max time”参数时,它会顺利通过。例如,一个返回大约200KB json数据的示例请求,Django需要大约1秒的时间来计算。但是UNIX套接字似乎需要1-2秒,对于2

我正在运行一个谷歌云计算虚拟机作为我的应用服务器,这个应用程序可以在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秒


几个unix实体由文件表示,但根本不是文件。管道和套接字是由非文件文件表示的实体的示例

因此,从unix套接字进行写入和读取不会绑定到文件系统I/O,也不会共享文件系统时间响应。事实上,unix套接字是IPC最快的方式之一,比TCP套接字更有效,因为它根本不使用网络I/O

尽管如此,以下是一些关于如何解决您的特定问题的提示:

  • 评估应用程序的性能问题。分析它并检查它可能在哪里花费了太多时间。通常情况下,I/O是性能问题的主要罪魁祸首。此外,糟糕的算法、长列表上的线性搜索也是常见的犯罪
  • 检查web服务器和应用程序网关上的配置
  • 检查进程调度。如果每个人都在同一个机器上运行,那么对于重载来说,进程并发性可能是一个问题。确保所有流程都以适当的优先级运行

  • 祝你好运

    第一步是以最佳方式配置uWSGI,因为这是向套接字写入和从套接字写入。根据负载和系统架构,您可能希望运行多个线程或多个uWSGI工作线程。接下来,您将告诉Nginx使用epoll或类似的东西,并配置您的uwsgi参数,例如keep_alive、超时、缓冲区、send_文件块大小等。