首页 > 解决方案 > 如何摆脱 KVM VM 中 java 和 php 进程之间的进程间通信中的 tcp-ip 发送延迟

问题描述

我有一个由 java 部分和 php 部分组成的 Web 应用程序。当用户发出请求时,php 进程将打开到 java 进程的 tcp/ip 连接。它将在请求期间保持此连接打开,并且此连接将用于来回发送大量信息。只要该应用程序托管在专用服务器或使用 OpenVZ 的 VM 上,它就可以很好地运行。

一旦我尝试将它托管在 KVM VM 上,它就会变得非常慢。这样做的原因是,在单个用户请求中,php 进程可以轻松地向 java 进程发送多达 1 或 2 千个 tcp-ip。现在,由于这一切都是通过同一个连接完成的,这确实不应该是一个问题,但是在 KVM VM 上,似乎每次发送都会有大约 20 毫秒的延迟,所以现在通常需要 0.1 秒的请求需要 20 秒。

我不是 100% 肯定 KVM 是罪魁祸首,但我已经在 3 个使用 OpenVZ 的不同托管服务提供商和另外 3 个使用 KVM 的不同托管服务提供商上对此进行了测试。它在所有 OpenVZ 主机上运行良好,并且所有 KVM 主机上都存在发送延迟问题。

O 和我在 java 和 php 端都设置了 tcpnodelay。

知道我可以尝试如何在 KVM 上进行这项工作吗?

标签: javaphplinuxtcp-ipkvm

解决方案


所以回答我自己的问题。看来您似乎无法避免发送延迟,因为即使它在本地主机上,它仍然必须从虚拟化层到网络层并进行备份。

但是,解决方案不是在 localhost 上创建 TCP 套接字,而是使用 Unix 套接字。由于 Unix 套接字不以任何方式访问网络层。

作为奖励,使用 Unix 套接字而不是 TCP 套接字给了我的应用程序一个很好的全面性能提升。包括在设置上它以前工作得很好。


推荐阅读