Я передаю около 5000 сообщений в секунду, их вес варьируется от 100 до 4500 байт, в среднем около 300 байт каждое. В среднем я отправляю через этот сокет около 2,5 мегабайт данных в секунду.
Мой сценарий мониторинга работает следующим образом:
- Привяжите программу C++ к сокету и оставьте ее работающей.
- Добавьте временную метку к каждому сообщению, исходящему из программы C++.
- Начать скрипт Python, подключаемся к сокету, получаем сообщение, получаем временную метку и вычитаем временную метку вывода, получаем измерение задержки.
- Отслеживайте среднюю задержку при прохождении x сообщений.
Когда я запускаю сценарий, задержка сокета колеблется около 200 микросекунд. Это соответствует моим ожиданиям и кажется правильным. Однако через 1 минуту средняя задержка составляет около 1,5 миллисекунды, около 10–15 мс через 4 минуты и стабилизируется на уровне около 50 мс через 10 минут.
Если я перезапущу сценарий Python, задержка снова вернется к 200 микросекундам. Я не думаю, что проблема в задержке сообщений, потому что в этом случае задержка продолжала бы увеличиваться, а иногда и уменьшаться, вместо того, чтобы увеличиваться линейно до определенного порога предсказуемым образом.
В чем может быть проблема?
Есть ли способ изменить настройки ZMQ, чтобы попытаться улучшить это, или посмотреть, есть ли у него какая-то внутренняя проблема с задержкой?
Подробнее здесь: https://stackoverflow.com/questions/750 ... ncy-spikes
Мобильная версия