У меня есть Java-приложение, которое использует несколько экземпляров MulticastSocket для прослушивания.
на несколько UDP многоадресных каналов. Каждый такой сокет обрабатывается отдельным потоком.
Поток читает каждую дейтаграмму, анализирует ее содержимое и записывает в журнал (log4j) идентификатор последовательности пакета (long) и метку времени, в которую была получена датаграмма.
Когда я пытаюсь запустить 2 экземпляра одного и того же приложения на Windows Server 2008 R2,
с 2 * 6 ядрами и сравните 2 журнала, созданные двумя приложениями,
Я заметил, что довольно часто сроки пакетов не совпадают.
Большинство пакетов принимаются двумя приложениями одновременно (милис), но часто
разница в времени приема одного и того же пакета составляет около 1-7 мс
по 2 приложения.
Я попытался выделить больше буферов в NIC, а также увеличил буфер чтения сокетов.
Кроме того, я попытался минимизировать прогоны GC, и я также использую -verbose: gc и могу видеть
что времена GC и проблемные различия во времени не происходят одновременно.
Это позволяет мне предположить, что моя проблема не связана с GC.
Не обнаружено проблем с отбрасыванием пакетов, и проблема с пропускной способностью маловероятна.
Идеи / Мнения приветствуются.
Спасибо.