1

我在使用 ZMQ 时遇到了一个奇怪的问题,我只是无法调试。这些是组件:

  • Java ZMQ 服务器——几乎是这个例子的完全副本。有一百个工作线程。
  • PHP 客户端 - 使用 REQ 套接字的简单请求回复。这是请求流程:

    $zcontext = new ZMQContext();
    $socket = new ZMQSocket($zcontext, ZMQ::SOCKET_REQ);
    $socket->connect(<address>);
    $startTime = microtime(true);
    $socket->send(<request>);
    $result = $socket->recv();
    $totalTime = microtime(true) - $startTime;
    

ZMQ 套接字使用 TCP,服务器和客户端都在同一台机器上。

PHP 脚本由 apache 提供,我正在使用 apache 基准进行负载测试。我发出 5000 个请求,并发性为 200。在 PHP 客户端上,我记录了请求回复 ( $totalTime) 所需的时间。在大多数情况下,这个时间非常短(低于 500 毫秒),但有时需要很长时间 - 有时甚至 60 秒(发送 + 接收)。

我添加了一些额外的日志记录来找出问题发生的位置,事实证明,每当需要很长时间时,几乎所有时间都在 PHP 的发送和 Java 的接收之间——因此数据包需要很长时间才能到达服务器。

我没有设置任何特殊的 ZMQ 设置,或者做任何不寻常的事情,所以我不知道是什么导致了这个问题。还应该注意的是,即使在较低的并发下问题仍然存在(我也在 100 和 150 测试过),但最大请求时间较短。

抱歉,如果问题看起来含糊不清 - 我会提供可能需要的任何其他详细信息。

4

0 回答 0