如何消除 KVM VM 中 java 和 php 进程之间的进程间通信中的 tcp-ip 发送延迟
How to get rid of tcp-ip send delay in interprocess communication between a java and a php process in KVM VM's
我有一个 Web 应用程序,它由 java 部分和 php 部分组成。当用户发出请求时,php 进程将打开到 java 进程的 tcp/ip 连接。它将在请求期间保持此连接打开,此连接将用于来回发送大量信息。只要该应用程序托管在专用服务器或使用 OpenVZ 的 VM 上,它就会运行得很好。
一旦我尝试将它托管在 KVM VM 上,它就会变得非常慢。这样做的原因是,在单个用户请求中,php 进程可以轻松地向 java 进程发送多达 1 或 2000 个 tcp-ip。现在因为这一切都是通过同一个连接完成的它真的不应该是一个问题但是在 KVM VM 上似乎每个发送都有大约 20 毫秒的延迟所以现在通常需要 0.1 秒的请求需要 20 秒而不是。
我不是 100% 肯定 KVM 是罪魁祸首,但我已经在使用 OpenVZ 的 3 个不同的托管服务提供商和另外 3 个使用 KVM 的不同托管服务提供商上进行了测试。它在所有 OpenVZ 主机上运行良好,并且在所有 KVM 主机上都存在发送延迟问题。
O 并且我在 java 和 php 端都设置了 tcpnodelay。
知道我可以尝试在 KVM 上使它工作吗?
所以回答我自己的问题。看起来你似乎无法避免发送延迟,因为即使它在本地主机上,它仍然必须从虚拟化层向下到网络层并备份。
但是,解决方案不是在本地主机上创建 TCP 套接字,而是使用 Unix 套接字。由于 Unix 套接字不以任何方式访问网络层。
作为奖励,使用 Unix 套接字而不是 TCP 套接字使我的应用程序获得了全面的性能提升。包括之前的设置是否正常。
我有一个 Web 应用程序,它由 java 部分和 php 部分组成。当用户发出请求时,php 进程将打开到 java 进程的 tcp/ip 连接。它将在请求期间保持此连接打开,此连接将用于来回发送大量信息。只要该应用程序托管在专用服务器或使用 OpenVZ 的 VM 上,它就会运行得很好。
一旦我尝试将它托管在 KVM VM 上,它就会变得非常慢。这样做的原因是,在单个用户请求中,php 进程可以轻松地向 java 进程发送多达 1 或 2000 个 tcp-ip。现在因为这一切都是通过同一个连接完成的它真的不应该是一个问题但是在 KVM VM 上似乎每个发送都有大约 20 毫秒的延迟所以现在通常需要 0.1 秒的请求需要 20 秒而不是。
我不是 100% 肯定 KVM 是罪魁祸首,但我已经在使用 OpenVZ 的 3 个不同的托管服务提供商和另外 3 个使用 KVM 的不同托管服务提供商上进行了测试。它在所有 OpenVZ 主机上运行良好,并且在所有 KVM 主机上都存在发送延迟问题。
O 并且我在 java 和 php 端都设置了 tcpnodelay。
知道我可以尝试在 KVM 上使它工作吗?
所以回答我自己的问题。看起来你似乎无法避免发送延迟,因为即使它在本地主机上,它仍然必须从虚拟化层向下到网络层并备份。
但是,解决方案不是在本地主机上创建 TCP 套接字,而是使用 Unix 套接字。由于 Unix 套接字不以任何方式访问网络层。
作为奖励,使用 Unix 套接字而不是 TCP 套接字使我的应用程序获得了全面的性能提升。包括之前的设置是否正常。