如何使UNIX套接字更快?

时间:2016-09-14 09:09:01

标签: nginx uwsgi unix-socket

我正在运行Google Cloud Compute VM作为我在iOS和Android上可用的应用程序的应用程序服务器。服务器在uWSGI中运行Django,前面是nginx。 uWSGI和nginx之间的通信通过unix文件套接字发生。

最近我开始注意到客户端的超时。我做了一些实验,发现uWSGI有时会在将数据写入文件套接字时出错。当我增加“最长时间”时间在客户端的参数,它顺利通过。例如,返回大约200KB json数据的样本请求,Django计算大约需要1秒。但UNIX套接字似乎需要1-2秒,这对于200KB的响应来说似乎太高了。如果客户端期望在2秒内响应,则通常会导致uWSGI发生写入错误(如下面的屏幕截图所示)。当我在客户端增加超时时,它会顺利通过。

我想知道是否有一些配置更改可以更快地在UNIX套接字上进行读写。对于来自我的服务器的JSON响应,200KB是一个非常小的大小 - 所以我不能让它失效。出于商业原因,我的客户端(iOS或Android)的超时时间不会超过2秒。

Screenshot from uwsgi socket intercept

1 个答案:

答案 0 :(得分:0)

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

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

如上所述,这里有一些关于如何解决您的特定问题的提示:

  1. 评估您的应用是否存在性能问题。对其进行剖析并检查可能花费太多时间的位置。通常,I / O是性能问题的主要反派。此外,糟糕的算法,长列表上的线性搜索也是常见的罪恶。
  2. 检查Web服务器和应用程序网关上的配置。
  3. 检查进程安排。如果每个人都在同一个盒子上运行,那么进程并发可能是重负载的问题。确保所有进程都在适当的优先级下运行。
  4. 祝你好运!