Попытка определить использование / скачок пропускной способности на Linux Debian VM

Я пытаюсь определить проблему с виртуальной машиной Linux (Debian), работающей под Hyper-V на Windows Server 2016.

Проблема в том, что через случайные промежутки времени я наблюдаю огромные всплески пропускной способности, из-за которых сетевой порт физического сервера становится максимальным, что приводит к потере связи с физическим сервером.

enter image description here

Я попытался ограничить пропускную способность. к виртуальной машине в разделе «Управление пропускной способностью» сервера Hyper-V, но это не имеет никакого эффекта.

enter image description here

У меня также есть tr используется Wondershaper ( https://github.com/magnific0/wondershaper ), который, хотя, кажется, ограничивает «некоторый» трафик, я все еще вижу огромные всплески, поэтому он не может забрать что угодно вызывает это.

Я также пробовал использовать ethtool для изменения скорости интерфейса, но проблема не устранена.

На данном этапе я не могу понять, что вызывает это и как это предотвратить .

Может ли кто-нибудь предложить что-нибудь еще, что я могу попытаться определить, что могло быть причиной этого?

Спасибо.

ОБНОВЛЕНИЕ: Я установил netatop на виртуальную машину и обнаружил возникшую проблему (см. Ниже), но, опять же, он не показывает, что происходит и где расходуется пропускная способность (если я что-то не упускаю). Вы можете увидеть проблему,но как он может пройти через установленную мной скорость сетевого интерфейса 300 Мбит / с? Он записывает 965 Мбит / с, как это может быть?

enter image description here

0
задан 29 March 2020 в 13:10
1 ответ

Правильно ли я предполагаю, что синяя линия представляет входящий трафик (загруженный на виртуальную машину извне), а фиолетовая линия представляет исходящий (загруженный с виртуальной машины извне)? Если это так, то функции качества обслуживания Windows (QoS), лежащие в основе управления пропускной способностью Hyper-V , не будут работать для снижения пиков входящего трафика :

Примечание: QoS можно использовать для управления исходящим трафиком. , но не входящий трафик. Например, с Hyper-V Replica вы можете использовать QoS для управления исходящим трафиком (с основного сервера), но не входящим трафиком (с сервера Replica).

Также см. Это обсуждение TechNet , что усиливает актуальность для Hyper-V:

Я могу подтвердить, что [максимальная пропускная способность Hyper-V] применяется только для исходящего трафика виртуальных машин. Но в документации этот факт не упоминается. Это ошибка или функция?

Попытайтесь определить конкретное приложение или службу, которые используют полосу пропускания. Один из способов сделать это - использовать поверх , который доступен в репозиториях Debian . Однако вам нужно будет вручную установить модуль ядра netatop , который включает сетевой учет для каждого процесса, но не включен в пакет Debian. Полные инструкции находятся на веб-сайте и кратко изложены здесь:

  1. Загрузите последнюю версию netatop-xxtar.gz
  2. Установите пакеты zlib1g-dev , build-essential и linux-headers-amd64 (при 64-битной архитектуре)
  3. Скомпилируйте и установите модуль и демон. Из верхнего каталога распакованного архива выполните следующие команды:

     make
    sudo make install
     
  4. Чтобы загрузить модуль и запустить демон:

     systemctl start netatop
     
  5. Для загрузки модуля и автоматического запуска демона после загрузки:

     systemctl enable netatop
     

Запустите sudo atop -n на виртуальной машине и дождитесь скачка нагрузки в сети. Вы, вероятно, сможете обнаружить проблемную службу по ее высоким значениям BANDWI и NET, например sshd в этом примере:

enter image description here

Кстати, я предполагаю, что ваш сетевой график специально измеряет сетевой адаптер виртуальной машины. Если нет - например, если он измеряет физический адаптер на сервере Hyper-V - то это может быть процесс Windows, который вызывает всплески. Подход к решению этой проблемы будет аналогичным, и вы начнете с поиска аналога поверх Windows.

ОБНОВЛЕНИЕ:

Ваш снимок экрана показывает, что количество IP-пакетов уровня 3 за этот период времени ( ipi = 866802) значительно превышает общее количество пакетов ICMP ( icmpi = 199) плюс пакетов TCP / UDP уровня 4 ( tcpi = 4316, udpi = 47). Это, плюс отсутствие участия любого запущенного процесса, предполагает, что виртуальная машина наводнена искаженным (вредоносным?) Трафиком из внешнего источника.

Вы захотите применить предложение davidgo использовать tcpdump . Один из способов его использования - запустить цикл bash, чтобы дождаться, пока количество входящих пакетов в секунду не превысит пороговое значение:

#!/bin/bash
threshold=10000   # packets/sec; note that atop(1) reports packets per 10sec by default
waiting=1
while [[ $waiting -eq 1 ]]
do
    atopsar -w 10 1 | tail -n1 | awk "\$2 < $threshold {exit 1}"
    waiting=$?
done
tcpdump -ieth0 -w out.pcap

После возникновения проблемы вы можете скопировать полученный файл out.pcap на другой компьютер. а затем откройте его с помощью Wireshark. Оттуда примените Статистика -> Конечные точки , чтобы увидеть, откуда исходит избыточный трафик. Если устройство в вашей локальной сети - возможно, даже сервер Hyper-V - генерирует трафик, вы можете перенастроить его, чтобы остановить. Если один IP-адрес в Интернете генерирует трафик, вы можете найти способ занести его в черный список с помощью брандмауэра. Если IP-адресов много, возможно, вам потребуется прочитать о распределенных атаках типа «отказ в обслуживании» (DDoS) и о том, как использовать брандмауэр и / или интернет-провайдера для блокировки трафика. Многие статьи о DDoS доступны в Интернете, например , эта статья на Amazon .

1
ответ дан 30 March 2020 в 01:21

Теги

Похожие вопросы