gpt4 book ai didi

nginx - 如何使 UNIX 套接字更快?

转载 作者:行者123 更新时间:2023-12-01 04:53:07 25 4
gpt4 key购买 nike

我正在运行一个 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 秒。

Screenshot from uwsgi socket intercept

最佳答案

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

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

也就是说,这里有一些关于如何解决您的特定问题的提示:

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

  • 祝你好运!

    关于nginx - 如何使 UNIX 套接字更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39486571/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com