java - 如何消除 KVM VM 中 java 和 php 进程间进程间通信的 tcp-ip 发送延迟

标签 java php linux tcp kvm

我有一个由 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 套接字使我的应用程序获得了全面的性能提升。包括之前的设置是否正常。

关于java - 如何消除 KVM VM 中 java 和 php 进程间进程间通信的 tcp-ip 发送延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53902687/

相关文章:

php - mysqli:它可以在一条语句中准备多个查询吗?

java - 找不到带边界的 POST 处理程序

java - 使用除 SINGLE_TABLE 之外的任何其他 Hibernate 继承策略时 JVM 崩溃

php - 只为 Laravel 5 中的一个环境启用全局中间件

php - 使用 fopen 的 Http post 请求

linux - 如何从终端中的任何路径运行 .sh 脚本?

php - 如何在 Centos 7 上将 php 从 cgi-fcg 更改为 php cli

java - 当我们创建一个新的 String 对象时,在构造函数中传递的 String 文字存储在哪里

java - 无法执行 jar 文件 : "no main manifest attribute"

python - 无法在centos上安装python新版本2.7.8