java — высокая задержка с zeromq

У меня странная проблема с ZMQ, которую я просто не могу отладить. Это компоненты:

  • Java ZMQ Server — почти точная копия этот пример. Есть сто рабочих потоков.
  • Клиент 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 Benchmark. Я делаю 5000 запросов с параллелизмом 200. На клиенте PHP я регистрирую время, которое требуется для ответа на запрос ($totalTime). В большинстве случаев это время очень мало (менее 500 мс), но иногда это занимает очень много времени — иногда даже 60 секунд (для отправки + получения).

Я добавил несколько дополнительных журналов, чтобы выяснить, где происходит проблема, и выясняется, что, когда это занимает очень много времени, почти все время находится между отправкой PHP и получением Java — таким образом, пакеты достигают сервера очень долго.

Я не устанавливаю никаких специальных настроек ZMQ или иным образом занимаюсь чем-то необычным, поэтому не знаю, что является причиной проблемы. Следует также отметить, что проблема сохраняется даже при более низких параллелизмах (я также тестировал на 100 и 150), но максимальное время запроса меньше.

Извините, если вопрос кажется расплывчатым — я предоставлю любые другие детали, которые могут понадобиться.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]