Вопрос или проблема
У меня есть много серверов на Linux, в большинстве своем это debian 10-11-12, на некоторых из них (я бы сказал, примерно на 20% из них) сетевая активность останавливается через фиксированные интервалы (обычно 45 секунд). Под «остановкой» я подразумеваю, что rx/tx точно такие же, как и в предыдущую секунду:
cat /sys/class/net/eno1/statistics/rx_bytes
cat /sys/class/net/eno1/statistics/tx_bytes
Я заметил это только после внедрения мониторинга из-за некоторых жалоб, которые у меня были. Теперь я не могу найти виновника. Я пытался сделать дельту процессов, подозревая что-то вроде cron, но у меня ничего нет. Cron отключен, я не вижу ничего подозрительного.
Куда вы предлагаете мне смотреть, чтобы я мог обнаружить, что вызывает это?
Обновления для большей информации:
lspci | grep -E -i --color 'network|ethernet'
01:00.0 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 Gigabit Ethernet PCIe
01:00.1 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 Gigabit Ethernet PCIe
02:00.0 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 Gigabit Ethernet PCIe
02:00.1 Ethernet controller: Broadcom Inc. and subsidiaries NetXtreme BCM5720 Gigabit Ethernet PCIe
root@debian:~# ip monitor dev eno1
xxx.xx.x.1 FAILED
xxx.xx.x.1 FAILED
xxx.xx.x.1 FAILED
xxx.xx.x.0 FAILED
xxx.xx.x.1 FAILED
xxx.xx.x.0 FAILED
xxx.xx.x.1 FAILED
xxx.xx.x.0 FAILED
xxx.xx.x.1 FAILED
xxx.xx.x.0 FAILED
xxx.xx.x.0 FAILED
xxx.xx.x.0 FAILED
xxx.xx.x.1 FAILED
xxx.xx.x.0 FAILED
xxx.xx.x.0 FAILED
xxx.xx.x.0 FAILED
xxx.xx.x.1 FAILED
xxx.xx.x.0 FAILED
xxx.xx.x.0 FAILED
xxx.xx.x.1 FAILED
xxx.xx.x.1 FAILED
xxx.xx.x.0 FAILED
xxx.xx.x.1 FAILED
xxx.xx.x.1 FAILED
journalctl --system -b -x
не показывает ничего во время этих событий.
ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 51:9f:35:18:22:90 brd ff:ff:ff:ff:ff:ff
altname enp1s0f0
3: eno2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 51:9f:35:18:22:91 brd ff:ff:ff:ff:ff:ff
altname enp1s0f1
4: eno3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 51:9f:35:18:22:92 brd ff:ff:ff:ff:ff:ff
altname enp2s0f0
5: eno4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 51:9f:35:18:22:93 brd ff:ff:ff:ff:ff:ff
altname enp2s0f1
9: wg0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1420 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 500
link/none
и
ethtool eno1
Settings for eno1:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Link partner advertised pause frame use: Symmetric Receive-only
Link partner advertised auto-negotiation: Yes
Link partner advertised FEC modes: Not reported
Speed: 1000Mb/s
Duplex: Full
Auto-negotiation: on
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
MDI-X: off
Supports Wake-on: g
Wake-on: d
Current message level: 0x000000ff (255)
drv probe link timer ifdown ifup rx_err tx_err
Link detected: yes
Похоже, что скорость вашего сетевого адаптера установлена на “auto
“, и по каким-то причинам (погружаясь в детали) каждые 45 секунд сетевые адаптеры заново оговаривают скорость соединения. В это время пакеты не проходят через соединение.
Проверьте свою скорость соединения с помощью
ip link show
и, выбрав скорость, используйте
ip link set dev XXX speed YYY
(‘XXX’ — имя устройства, а ‘YYY’ — выбранная вами скорость).
Все переоговаривания происходят на уровне 1 модели OSI. На уровне 1 нет ведения журнала. Выбрав скорость, вы отключаете автоматическую настройку.
Конечно, прочитайте man ip ip-link
. Если на ваших системах нет ip
, вы можете, вероятно, решить проблему с помощью ifconfig
, прочитайте man ifconfig
.
Запустите на одной из ваших проблемных машин
tcpdump -n -i eno1 broadcast or stp
и ищите любые штормы широковещательной рассылки STP.
Затем вам нужно будет определить, связано ли это с реальной физической петлей в вашей сети или это полное неправильное поведение STP, если у вас слишком много хостов, реализующих его.
Ответ или решение
Проблема с сетью: Остановка активности на 45 секунд
Вы столкнулись с проблемой, когда активность сети на ваших Linux-серверах останавливается с фиксированным интервалом – каждые 45 секунд. Это может вызывать значительные неудобства и требует тщательного анализа с целью выявления причин. Рассмотрим, какие шаги стоит предпринять для диагностики и решения проблемы.
1. Проверка работы сетевого интерфейса
Сначала необходимо удостовериться, что сетевая карта функционирует корректно. Команда ip link show
показала, что интерфейс eno1
находится в состоянии UP. Однако стоит проверить, действительно ли происходит автоопределение скорости и дуплекса. Вы можете использовать команду:
ethtool eno1
Если интерфейс находится в режиме автоопределения, это может быть причиной периодического сбоя. Рассмотрите возможность выбора фиксированной скорости и дуплекса. Для этого выполните следующие команды:
ip link set dev eno1 speed 1000
ip link set dev eno1 duplex full
Проверяйте документацию (man ip ip-link
или man ifconfig
), чтобы убедиться в правильности применяемых параметров.
2. Мониторинг событий сети
Запустите tcpdump
, чтобы отслеживать серверный трафик и выявить возможные STP (Spanning Tree Protocol) или другие широковещательные проблемы:
tcpdump -n -i eno1 broadcast or stp
Обратите внимание на увеличение сообщений STP, которые могут указывать на наличие петли в сети или неправильной конфигурации STP. Если наблюдаются частые изменения состояния порта, стоит проверить конфигурацию коммутаторов и маршрутизаторов.
3. Системные журналы
Хотя вы уже проверили журналы командой journalctl --system -b -x
, убедитесь, что проверяете все уровни логирования и не пропустили критические сообщения. Используйте фильтры для поиска ошибок, связанных с сетью:
journalctl -k | grep -i error
4. Проверка автоматических задач
Вы упомянули, что cron отключён, однако стоит проверить другие возможные автоматические процессы. Используйте команды systemctl list-timers
и atq
для проверки, не запускаются ли отложенные команды или таймеры системы.
5. Поиск аппаратных неисправностей
Некорректная работа сетевой карты может также стать причиной остановки трафика. Рассмотрите возможность:
- Обновления прошивки сетевых карт.
- Проверки кабелей, так как наличие физического повреждения или плохого контакта может вызвать флуктуации в соединении.
- Протестируйте ваши сетевые карты в другом сервере или в аналогичном окружении.
6. Мониторинг сетевой активности
Если проблема сохраняется, попробуйте использовать специализированные инструменты для мониторинга сети, такие как nload
, iftop
или vnstat
, которые позволяют отслеживать использование полосы пропускания и могут дать подсказки о том, как именно ведёт себя сеть.
Заключение
Проблема с остановкой сетевой активности может быть вызвана рядом факторов — от некорректной настройки интерфейса, изменений на уровне STP до аппаратных неисправностей. Проводя систематическое расследование с помощью вышеописанных методов, вы сможете pinpoint, где именно кроется проблема, и устранить её. Не забывайте также о документировании всех изменений во избежание появления подобных неполадок в будущем.