5

У меня проблема с производительностью сети. Я использую Ubuntu 16.04 на VMware Cloud Server с сетевым адаптером E1000. Но я вижу некоторые пакеты, отброшенные в разделах команды ifconfig:

root@ubuntu:~# ifconfig ens192
ens192    Link encap:Ethernet  HWaddr 00:50:56:03:25:14  
          inet addr:192.16.1.100  Bcast:192.16.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:574749 errors:0 dropped:83 overruns:0 frame:0
          TX packets:76478 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:44109471 (44.1 MB)  TX bytes:19484534 (19.4 MB)

Хотя некоторые пакеты были отброшены, но на моем сервере запущена игра в режиме реального времени, вы знаете, что это влияет на моих клиентов, подключающихся к нему.

Я провел некоторые исследования и изучение информации в Google, после чего я попытался изменить конфигурационный файл для буфера, максимального размера окон и так далее. Но это все еще отбрасывает мои пакеты.

Итак, теперь я хочу перехватить пакеты, которые отброшены для анализа, что это за пакет.

Я также попробовал этот захват для моего представления в wireshark:

sudo tcpdump -i ens192 -n -w /var/www/html/logs.pcap -C 1 -Z root

Но я не думаю, что вижу, какие пакеты отброшены! Я думаю, что отброшенные пакеты игнорируются перед переходом на фильтр tcpdump.

Можете ли вы предложить мне, какой метод для захвата "отброшенных пакетов" выше (отброшено:83)?

Заранее спасибо!

2 ответа2

3

Проблема может быть в самом tcpdump: если он не отвечает достаточно быстро, тогда старые пакеты будут перезаписаны новыми, что означает, что они отброшены.

Если вы захватываете все байты каждого пакета, очень легко переполнить буфер захвата пакетов ядра. Симптомы этого переполнения состоят в том, что ваша программа трассировки пакетов сообщит, что она отбросила пакеты.

В случае tcpdump он выводит сводную информацию о том, сколько пакетов было захвачено, отфильтровано и отброшено при остановке захвата. Например:

$ sudo tcpdump -i en0 -w trace.pcap
tcpdump: listening on en0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C
94 packets captured
177 packets received by filter
0 packets dropped by kernel

Если dropped число не равно нулю, вам нужно увеличить размер буфера захвата пакета, передав опцию -B в tcpdump. Попробуйте также без файла захвата, чтобы увидеть, если это улучшает коэффициент захвата.

2

Ваши вопросы, похоже, относятся к тому, чтобы вернуться назад и выяснить, что могло привести к падению предыдущего пакета, а не пытаться перехватить пакеты в реальном времени, чтобы попытаться найти тот, который отбрасывается. Что касается последнего, то ответ harrymc должен быть в состоянии поймать тот, который вы ищете.

Чтобы вернуться и посмотреть, что может происходить на этом интерфейсе, вы должны понимать, что заголовки, которые вы видите для RX packets:574749 errors:0 dropped:83 overruns:0 frame:0 - это просто сводка базовых счетчиков.

Из моего комментария я бы порекомендовал использовать команду / пакет ethtool из этого ответа, чтобы проанализировать некоторые счетчики, чтобы увидеть, можете ли вы найти что-то неуместное.
ethtool -S ens192

Из исходного файла драйверов Broadcom мы видим tp->rx_dropped++; для нескольких отдельных случаев в файле. 1 2 3 Любой из этих или более (в зависимости от вашего точного сетевого адаптера и лежащих в его основе драйверов) вносит свой вклад в то, что может вызывать отбрасывание пакетов.

Чтобы облегчить ваш ум, ваш сервер отбрасывает менее 0,015% пакетов, полученных на основе вашего вывода выше. Ваши клиенты не заметят перебоев в работе сервера или даже дрожания до тех пор, пока частота выпадений / ошибок не превысит 1%. Даже тогда это было бы едва заметно. TCP позаботится о любой необходимой повторной передаче.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .