java - Проблемы с MulticastSocket на Windows Server 2008

У меня есть java-приложение, которое использует несколько экземпляров MulticastSocket для прослушивания нескольких многоадресных UDP-каналов. Каждый такой сокет обрабатывается выделенным потоком.
Поток читает каждую Datagram, разбирает ее содержимое и записывает в журнал (log4j) порядковый номер пакета (long) и временную метку, когда Datagram была получена.

Когда я пытаюсь запустить 2 экземпляра одного и того же приложения на Windows Server 2008 R2, с 2 * 6 ядрами и сравнить два журнала, созданные двумя приложениями, я замечаю, что довольно часто время получения пакетов не совпадает.

Большинство пакетов принимается двумя приложениями в одно и то же время (milis), но часто разница между временем приема одного и того же пакета составляет около 1-7 мс. двумя приложениями.

Я попробовал выделить больше буферов в сетевой карте, а также сделал буфер чтения сокета больше. Кроме того, я пробовал минимизировать количество запусков GC, а также использовал -verbose:gc и могу видеть что время GC и проблемная разница во времени не происходят в одно и то же время. Это позволяет мне предположить, что моя проблема не связана с GC.

Проблем с отбрасыванием пакетов не наблюдалось, и проблема с пропускной способностью маловероятна.

Идеи / мнения приветствуются. Спасибо.

10
задан Oleg Mikheev 18 February 2012 в 11:13
поделиться