Java zeromq的高滞后

Java zeromq的高滞后,java,php,sockets,zeromq,jzmq,Java,Php,Sockets,Zeromq,Jzmq,我在ZMQ上遇到了一个奇怪的问题,我无法调试。这些是组成部分: JavaZMQ服务器-几乎是的一个精确副本。有一百个工作线程。 PHP客户端-使用REQ套接字进行简单的请求-应答。这是请求流: $zcontext = new ZMQContext(); $socket = new ZMQSocket($zcontext, ZMQ::SOCKET_REQ); $socket->connect(<address>); $startTime = microtime(true); $s

我在ZMQ上遇到了一个奇怪的问题,我无法调试。这些是组成部分:

JavaZMQ服务器-几乎是的一个精确副本。有一百个工作线程。 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测试的较低并发度下,问题仍然存在,但最大请求时间较低


抱歉,如果这个问题看起来很模糊-我将提供可能需要的任何其他详细信息。

在您额外的日志记录中,您是否明确确认在将消息发送到服务器之前,PHP/Apache在高负载下旋转脚本时不会出现延迟?不,我不确定如何才能做到这一点。一旦我调用socket->send from PHP,我就无法跟踪消息,直到我在服务器上收到它,对吗?我只知道socket->recv和socket->send之间的时差有时真的很高。好的,我理解得更好一点。您可以跟踪邮件。我们的目标是看看系统的哪一半落后,这将有助于指导进一步的探索。哦,酷。我们将在周一尝试,看看会出现什么。一些更新。对于单个PHP进程,问题只会在第一次请求时出现。此外,如果在套接字连接后添加1秒睡眠,问题就会消失。这可能是内存问题吗?