Я понимаю, что это очень субъективно и зависит от ряда переменных, но мне интересно, какие шаги выполняет большинство людей, когда им нужно диагностировать потерю пакетов в данной системе?
Я понимаю, что это очень субъективно и зависит от ряда переменных, но мне интересно, какие шаги выполняет большинство людей, когда им нужно диагностировать потерю пакетов в данной системе?
Ответы:
Я сетевой инженер, поэтому опишу это с моей точки зрения.
Для меня диагностика потери пакетов обычно начинается с "она работает не очень хорошо". Оттуда я обычно пытаюсь найти комплект как можно ближе к обоим концам связи (обычно это рабочая станция в офисе и сервер где-то) и пинговать как можно ближе к другому концу (в идеале «удаленная конечная точка», но иногда существуют брандмауэры, через которые я не могу отправить эхо-запросы, поэтому придется согласиться на интерфейс локальной сети на маршрутизаторе) и посмотреть, смогу ли я увидеть какие-либо потери.
Если я вижу потери, это обычно случай «недостаточной пропускной способности» или «связи с проблемами» где-то посередине, поэтому найдите маршрут через сеть и начните с середины, что обычно дает вам один конец или другой.
Если я не вижу потери, следующие два шага, как правило, «отправить больше пингов» или «отправить большие пинги». Если это не помогает, это указывает на проблему, пришло время посмотреть на политики QoS и статистику интерфейса через весь путь между конечными точками.
Если это ничего не находит, пришло время начать сомневаться в своих предположениях, действительно ли вы страдаете от потери пакетов. Единственный надежный способ найти это - сделать одновременный захват на обоих концах, либо используя WireShark (или эквивалентный) на хостах, либо подключая анализаторы (вероятно, используя WireShark или аналогичные) через сетевые ответвления. Затем идет удовольствие от сравнения двух захватов пакетов ...
Иногда то, что называют «потерей пакетов», является просто чем-то заметно более медленным на стороне сервера (например, перемещение базы данных из «в той же локальной сети» в «20 мсек» и использование запросов, которые требуют очень много туда-обратно между интерфейсом и базой данных).
С точки зрения системы Linux, я сначала посмотрю на потерю пакетов в сетевом интерфейсе с ethtool -S ethX
.
Большую часть времени увеличение кольцевого буфера с помощью ethtool -G ethX rx VALUE
решает эту проблему.
Иногда прерывания не сбалансированы, потому что в системе отсутствует служба irqbalance, поэтому посмотрите в chkconfig
(EL) или update-rc
(Debuntu), чтобы увидеть, работает ли эта служба. Вы можете сказать, не прерывается ли прерывание, потому /proc/interrupts
что покажет только Core 0, обслуживающий все каналы IRQ.
В противном случае, возможно , придется увеличить , net.core.netdev_max_backlog
если система проходит более нескольких гигабит трафика, и , возможно net.core.netdev_budget
.
Если это не сработает, вы можете изменить значения, объединяющие прерывания ethtool -C
.
Если на сетевом интерфейсе нет отбрасываний пакетов, посмотрите, netstat -s
нет ли отбрасываний в буферах сокетов, об этом будут сообщать статистические данные, такие как " pruned from receive queue
" и " dropped from out-of-order queue
".
Вы можете попробовать увеличить буферы сокетов по умолчанию и макс. Для соответствующего протокола (например, net.ipv4.tcp_rmem
для TCP).
Если приложение устанавливает собственный размер буфера сокета, то приложение может нуждаться в изменениях конфигурации. Если в вашем приложении жестко заданы размеры буфера сокетов, обратитесь к поставщику приложения.
Лично мне не нравится разгрузка протокола на сетевые карты (контрольная сумма, разгрузка сегментации, большая разгрузка при приеме), так как кажется, что это вызывает больше проблем, чем стоит. ethtool -K
Возможно, стоит поиграть с использованием этих настроек .
Посмотрите на опции модуля для вашей сетевой карты ( modinfo <drivername>
), так как вам может потребоваться изменить некоторые функции. Чтобы привести один пример, с которым я столкнулся, использование Intel Flow Director в системе, которая обрабатывает один большой поток TCP, вероятно, повредит эффективности этого потока, поэтому отключите FDir.
Кроме того, вы получаете ручную настройку этой конкретной системы для ее конкретной рабочей нагрузки, которая, я думаю, выходит за рамки вашего вопроса.
Изолировать, затем устранить.
Найдите наименьшее подмножество путей с проблемой. Сделайте это путем тестирования различных комбинаций и / или создания пользовательских отчетов. Не забудьте учесть время в уравнении. Может быть, это всего лишь потеря пакетов на весь трафик в конкретной сети, или, возможно, страдают только беспроводные клиенты. Учитывайте разные типы трафика (ограничение скорости на пингах). Найдите самый надежный и легко повторяемый способ проверки.
Тогда устраните потенциальные причины. Уменьшить трафик по ссылкам (временно), удалить источники помех из спектра, отключить определенных клиентов. В конце концов вы найдете источник проблемы.
Иногда вы можете использовать ярлыки, просматривая дампы пакетов или догадываясь (это всегда bittorrent). Кроме того, скажите своему профессору, что серверный сбой - это здорово
Пинги могут не показывать потерю пакетов, если вы не отправляете большие пинги! У меня была потеря пакетов в моей сети, которая была невидимой, пока я не увеличил размер своего пакета ping.
Для окон:
ping -n 30 -l <largevalue> <target>
Для largevalue
я использовал 40960 (пакет 40k)
Для target
я использовал первые несколько IP - адресов изtracert google.com
(это были мои роутеры и кабельный модем). У одного из устройств ниже по цепочке произошла ужасная потеря пакетов (> 60%) для больших пакетов, но 0% для маленьких. Я исправил это, перезапустив это, но это мог также быть кабель или кое-что внутреннее, которое нуждается в замене.