В нашем онлайн-проекте на основе C/S мы используем TCP для сетевой передачи. Мы включаем Libevent, автоматически используем буферизацию для каждого подключения к обработке с помощью сетевого ввода-вывода.Чрезвычайно высокая латентность при занятости сети, TCP, libevent
Он работает задолго до этого, но проблема с запаздыванием возникает недавно. Когда я делаю некоторые стресс-тесты, чтобы сделать сеть более занятой, латентность становится чрезвычайно высокой, несколько секунд или более. Сервер погружается в запутанном состоянии:
- средняя загрузка процессора снизилась (0% -60% -0% -60% повтор, ожидая что-то?)
- чистый трафик уменьшился (nethogs)
- клиенты, подключенные к серверу еще живой (NetStat & TCPDUMP)
Это выглядит как-то волшебным образом замедлили всю систему вниз, но новое подключение к серверу откликнулся выйти вовремя.
Когда я изменил протокол на UDP, он работает хорошо в той же ситуации: нет очевидной задержки, система работает быстро. Чистый трафик составляет около 3 Мбит/с.
Проект работает в Интранете. Я также тестировал максимальную скорость загрузки, почти 18M/S.
Я изучил часть файлов заголовков и дубликатов Libevent, попытался установить ограничение скорости для всех подключений. Он сделал некоторые улучшения, но не полностью разрешил проблему, хотя я пробовал несколько разных конфигураций. Вот мои параметры: read_rate 163840, read_burst 163840, write_rate 163840, write_burst 163840, tick_len 500ms.
Благодарим за помощь!
Я очень благодарен вам за вашу помощь, большое вам спасибо! Я последовал вашим советам, чтобы получить сетевой захват через wirehark. Я получил в общей сложности 312788 кадров в течение 180 секунд, в том числе: 37 Дублировать ACK от клиента к серверу, 27 повторных передач с сервера на клиент. График ввода-вывода также очень непоследовательный, в основном 94 Кбайт/с, и внезапно взлетает до 4040 ~ 5586 КБ/с в течение обычного временного интервала. Средний временной интервал составляет около 7 секунд, и с течением времени интервал становится все длиннее и длиннее, другими словами, график ввода-вывода становится все более непоследовательным. – walter
@walter Добро пожаловать. Если вы можете поместить захват где-нибудь, я могу его получить, я был бы рад взглянуть. Возможность выяснить, что происходит от сетевого захвата, - это настоящий навык, который, как правило, хорош в использовании отладчика. Но это может быть очень ценный навык, который стоит инвестировать. –
Могу ли я получить ваш адрес электронной почты? Мне немного сложно загрузить файл в облачный сервис, который вы можете легко получить. Скорость здесь, чтобы просмотреть зарубежный сайт, очень медленная. – walter