Сервер Asus RS160-S5, два Xeon E5420 @ 2.50GHz, четырех портовая сетевая карта intel 82571PT и встроенные (2х канальный интегрированный в чипсет контроллер + интерфейс физического уровня Intel 82563EB 10/100/1000 Мбит/с и 2 сетевых контроллера Intel 82573)
lagg0 объединяет четыре порта 82571PT и один встроенной сетевой карты. На интерфейсы lagg0 попадает мониторинг с роутера, далее в netgraph и выводить с другого lagg-интерфейса(два порта). На входящих в lagg0 интерфейсах есть ошибки из-за cpu:
FreeBSD 7.2-RELEASE # ifconfig em0 em0: flags=28943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,PPROMISC> metric 0 mtu 1500 options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM> ether 00:15:17:7f:57:b0 media: Ethernet autoselect (1000baseTX <full-duplex>) status: active lagg: laggdev lagg0 # netstat -w 1 -I em0 input (em0) output packets errs bytes packets errs bytes colls 125071 34001 77377039 0 0 0 0 127231 32662 78761625 0 0 0 0 129571 29724 81239227 0 0 0 0 125599 32527 78889850 0 0 0 0 #netstat -w 1 input (Total) output packets errs bytes packets errs bytes colls 985841 110710 600567974 780195 0 313484948 0 983657 120779 594569491 777140 0 306421389 0 996726 115091 602176326 789737 0 312895661 0 last pid: 3584; load averages: 4.31, 4.38, 4.37 up 0+01:41:59 17:39:14 99 processes: 13 running, 72 sleeping, 14 waiting CPU 0: 0.0% user, 0.0% nice, 100% system, 0.0% interrupt, 0.0% idle CPU 1: 0.0% user, 0.0% nice, 100% system, 0.0% interrupt, 0.0% idle CPU 2: 0.0% user, 0.0% nice, 3.5% system, 3.5% interrupt, 93.0% idle CPU 3: 0.0% user, 0.0% nice, 54.4% system, 0.0% interrupt, 45.6% idle CPU 4: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle CPU 5: 0.0% user, 0.0% nice, 100% system, 0.0% interrupt, 0.0% idle CPU 6: 0.0% user, 0.0% nice, 8.8% system, 0.0% interrupt, 91.2% idle CPU 7: 0.0% user, 0.0% nice, 75.4% system, 0.0% interrupt, 24.6% idle Mem: 58M Active, 26M Inact, 109M Wired, 144K Cache, 28M Buf, 7731M Free Swap: 4096M Total, 4096M Free PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND 31 root 1 -68 - 0K 16K CPU5 5 99:24 100.00% em2 taskq 29 root 1 -68 - 0K 16K CPU0 0 99:21 100.00% em0 taskq 30 root 1 -68 - 0K 16K CPU1 1 98:57 100.00% em1 taskq 14 root 1 171 ki31 0K 16K CPU4 4 91:29 100.00% idle: cpu4 16 root 1 171 ki31 0K 16K CPU2 2 78:47 93.65% idle: cpu2 12 root 1 171 ki31 0K 16K CPU6 6 94:44 91.06% idle: cpu6 39 root 1 -68 - 0K 16K CPU7 7 66:57 71.04% em7 taskq 32 root 1 -68 - 0K 16K - 3 62:11 64.79% em3 taskq 15 root 1 171 ki31 0K 16K RUN 3 38:53 34.03% idle: cpu3 11 root 1 171 ki31 0K 16K RUN 7 34:16 31.84% idle: cpu7 38 root 1 -68 - 0K 16K - 6 6:23 10.21% em6 taskq 34 root 1 -68 - 0K 16K - 2 8:07 7.76% em5 taskq 19 root 1 -32 - 0K 16K WAIT 2 1:27 1.22% swi4: clock sio 18 root 1 171 ki31 0K 16K RUN 0 7:38 0.00% idle: cpu0 13 root 1 171 ki31 0K 16K RUN 5 6:27 0.00% idle: cpu5 17 root 1 171 ki31 0K 16K RUN 1 5:12 0.00% idle: cpu1 21 root 1 -44 - 0K 16K WAIT 4 3:51 0.00% swi1: net
не помогло: polling 1000MHz,2000MHz;-tso;драйвера с сайта intel 6.9.20;изменение dev.em.0.rx_*
есть ли софтовое решение данной проблемы или какую выбрать железку/сетевку
Появились дисконекты, завышения пингов .
Схема сети: локальные роутеры занимаются шейпингом клиентов(ipfw + pipe + tablearg) , потом траф идет на сервер NAT(pf nat), с него патч идет непосредственно в сервер BGP(quagga + ipfw), а дальше в инет.
Сервера: На ОС FreeBSD 7.0 (в ядре вырублены левые дрова и вшит фаервол).
Сетевые Intel 1000MT Desctop.
Проц Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz. ОЗУ -2G
Трафик не такой больой , железо должно нормально справляться.
CPU загружается в пике не более чем по 60% оба ядра (распаралеливание происходит нормально)
Для сетевых , это тоже вроде не предел… (250Mb/s, 30-35k pps, порядка 80k сессий )
В pf на нат отрублен scrub.
Почему берутся эти ошибки?
Чем отличается Error и Discards? В каких случаях возникают ошибки in и out (особенно связка маскарад(нат) net0 и Mart (bgp) net1, которые соединены напрямую патчем. )
Где может быть узкое место?
Куда еще можно покопать ??
Завышения пингов начинаются на сервере NAT. net0 — в сторону инета , net1 — в сторону локальной сети
сыпятся ошибки
Системные команды, которыми можно проверить ресурсы системы, текущую нагрузку и просто просматривать различную информацию.
HDD
atacontrol list — просмотр всех жестких дисков в системе (показывает в том числе и их модели)
mount – показывает смонтированные подразделы и флаги из монтирования
cat /etc/fstab – таблица монтирования при загрузке
disklabel /dev/ad0s1 – показывает список подразделов в первом разделе диска ad0
swapinfo – показывает список подразделов свопинга на дисках и их использование
gstat – нагрузка на диски
fstat – показывает список открытых файлов (имена файлов не выводятся)
pstat -f – выводит список открытых файлов (имена файлов не выводятся)
iostat – выводит информацию, аналогичную systat -vmstat, но не выводит занятости диска по времени и может выводить среднюю статистику с момента загрузки.
iostat -d -w1 -c7 – нагрузка на диски. Статистика в удобном виде
vmstat – выводит количество операций на диске в секунду
sysinstall – можно посмотреть и изменить разметку диска и монтирование
systat -vmstat n – каждые n секунд выводит количество транзакций с диском в секунду, объем записанных/считанных данных на диск в секунду, средний размер транзакции и процент времени в течение которого диск был занят работой.
systat -io start 1 — HDD + CPU
diskinfo -t ad4 – тест на дисковую производительность
tunefs -p /var/ – информация о настройках файловой системы (UFS)
df -H – количество свободного места
df -i – количество свободных инодов
Network
ifconfig – список сетевых интерфейсов с ip-адресами, масками, mac-адресами, типами карт и их статусами (названия карточек можно посмотреть в файле конфигурации ядра)
ifconfig -d — Просмотреть список отключенных интерфейсов
ifconfig -u — Список включенных сетевух
netstat – вывод активных сетевых соединений (сокетов)
netstat -i ошибки на интерфейсах
netstat -m — просмотр хватает ли mbuf и т.д.
netstat -inb – сколько передано через интерфейс в байтах
netstat -ibt – список интерфейсов, разбитых по ip-адресам (!) с объемом трафика на каждом, количеством ошибок, коллизий, значением watchdog-таймера
netstat -hdw 1 -i net1 — Просмотр количества пакетов в сек, ошибок и дропов на интерфейсе (online)
netstat -r – таблица маршрутизации
systat -ifstat n – интенсивность передачи трафика (online) по всем сетевым интерфейсам за n секунд
systat -netstat n – аналог netstat в реальном времениsysctl kern.ipc.numopensockets – количество открытых сокетов
systat -ip n – таблица IP-пакетов и ошибок по типам за n секунд
systat -tcp n – таблица TCP-пакетов и ошибок по типам за n секунд
systat -icmp n – таблица ICMP-пакетов и ошибок по типам за n секунд
arp -a – просмотр всей таблицы ARP
arp -ad – очистка всей таблицы ARP
tcpdump -i rl0 host 192.168.61.20 and port 80 – сниффер пакетов на интерфейсе rl0, фильтрующий пакеты, содержащие адрес 192.168.61.20 и порт 80
trafshow -i rl0 – программа для сортировки и вывода сетевых потоков (устанавливается дополнительно пакетом или из портов)
System
top -mio – показать I/O по процессам
top -S – показать системные процессы в топе (по дефолту они не показываются)
top -SHPI — показать загрузку по ядрам, в том числе и системные процессы, кроме тех что в простое. Наиболее удобный вариант.
vmstat -z — чего не хватает
vmstat -i — прерывания по устройствам
systat -vmstat n – просмотр всей сводной статистики по системе(online). вывод показателей загрузки (number of jobs in the run queue averaged over 1, 5 and 15 min), состояния памяти (в страницах), количества процессов в группах, количество вызовов специальных функций ядра (traps, interrupts, system calls, network software interrupts), использование процессора, трансляции имен, активность свопа, прерывания, а также информацию по использованию диска (см)
uptime — можно просмотреть время работы системы без перезагрузок и load averages системы
pcpustat — мониторинг CPU (порт)
ps afx – список запущенных процессов и время процессора на каждый
rcorder /etc/rc.d/* /usr/local/etc/rc.d/* — Посмотреть очередность запуска сервисов в freebsd.
Memory
freecolor – очень симпатичная утилита для мониторинга использования памяти (ставится из портов)
Для детальной информации по расходу памяти:
fetch -o /usr/local/bin/free http://people.freebsd.org/~rse/dist/freebsd-memory
chmod +x /usr/local/bin/free
free
Службы времени
date – выводит текущее время и дату
w – выводит, сколько времени назад система загрузилась и список залогиненных пользователей
last – выводит историю перезагрузок и входов пользователей
lastlogin — выводит по пользователям дату и время последнего входа в систему
По snmp снимать входящие ошибки. В счетчике ifInErrors все подряд. Статус дуплекса есть в EtherLike-MIB как и множество других счетчиков.
input errors overrun
На шасси с установленной свичевой картой. Ошибки overrun вызваны недостаточной производительностью маршрутизатора. Причем ситуацию в конкретном случае можно усугубить. Для этого достаточно в таких маршрутизаторах использовать свичевые карты, чтобы трафик передавался через внутренний интерфейс Ba0/3. Cудя по таблице iftable, счетчики ошибок будут расти быстрее на этом интерфейсе при использовании свичевой карты с гигабитными портами.
В качестве примера вывод счетчиков с маршрутизатора cisco 1921
cisco1921# sh int | in overr|^GigabitEthernet0/[01]
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
GigabitEthernet0/0 is up, line protocol is up
48677539 input errors, 0 CRC, 0 frame, 48677539 overrun, 0 ignored
GigabitEthernet0/1 is up, line protocol is up
4533642 input errors, 0 CRC, 0 frame, 4533642 overrun, 0 ignored
input errors ignored
Недостаточная производительность. От приоритезации толку нет, будут дропы в голосе и видео.
98559 input errors, 0 CRC, 0 frame, 0 overrun, 98559 ignored
input errors unknown protocol drops
Вероятно LLDP включен на коммутаторе и маршрутизатором не поддерживается.
2238654 unknown protocol drops
input errors CRC
Проверить физику, дуплекс. Возможно небольшое колво ошибок при включении интерфейса.
59 input errors, 59 CRC, 0 frame, 0 overrun, 0 ignored
output drops
При настроенных на ограничение скорости политиках счетчик малоинформативен.
Input queue: 0/75/1/0 (size/max/drops/flushes); Total output drops: 3354485
input errors runts
Порт настроен в access, а на удаленной в trunk если ошибки постоянно растут.
32 runts, 0 giants, 0 throttles
32 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
input errors FCS
Менять SFP, порт оборудование на удаленной стороне.
Но это не точно поможет, т.к. если коммутатор на удаленной стороне работает в Cut-Through режиме коммутации, то фрейм с ошибкой мог передаться с предыдущего сетевого оборудования.
Возможно не работает автосогласование дуплекса. На 100мбит оптических линках это возможно. /network/eltex/#negotiation
input errors CRC
Проверить физику, дуплекс. На оптических линках возникает при заломах пачкорда, поэтому не надо его наматывать на органайзеры.
Ошибки могут возникать, если на одномодовом участке волс есть многомодовый патчкорд или пигтейл.
output discards
- если есть qos, смотреть очереди, буферы. Вот тут и начиаешь ценить коммутаторы со счетчиками очередей.
- speed mismatch (аплинк 1Gbit/s, downlink 100Mbit/s). Потери из-за burst, который не смог буферизировать коммутатор. Большинство свичей с shared буфером на всех портах.
дропы из-за неудачной модели
При выключенном на всех портах flowcontrol на тестах работает все медленно.
Счетчика ошибок нет. Смотреть и сравнивать счетчики на аплинке и даунлике.
Если не одинаково, то ставить другую модель коммутатора.
дропы из-за переподписки
На модульных коммутаторах при использовании плат с переподпиской возможны ошибки. Обратить внимание, что порты сгруппированы и не испольовать часть портов.
Апр
17
2010
С ростом сети и увеличением трафика через маршрутизатор возможна ситуация, когда роутер начинает не справляться с нагрузкой и начинает потихоньку терять пакеты на интерфейсах. Пока это эпизодическое явление, в пиковые моменты — ничего страшного, когда это явление становится постоянным и только растет число отброшенных пакетов нужно снимать нагрузку. Тут самое важное не пропустить тот момент, когда ошибки начинают появляться и планировать ввод второго маршрутизатора или апгрейд текущего. Лучше всего наблюдать за потерянными пакетами на графике.
Я использую такой конфиг для MRTG:
Target[127.0.0.1_rouerr1]: ifInErrors.1&ifInErrors.1:netstat@127.0.0.1: SetEnv[127.0.0.1_rouerr1]: MRTG_INT_IP="192.168.0.3" MRTG_INT_DESCR="em0" MaxBytes[127.0.0.1_rouerr1]: 125000000 Title[127.0.0.1_rouerr1]: Router Error rate on em0 PageTop[127.0.0.1_rouerr1]: <h1>Error rate on em0</h1> <div id="sysdetails"> <table> <tr> <td>System:</td> <td>Router</td> </tr> <tr> <td>Maintainer:</td> <td>noc@hilik.org.ua</td> </tr> <tr> <td>Description:</td> <td>em0 </td> </tr> <tr> <td>ifType:</td> <td>ethernetCsmacd (6)</td> </tr> <tr> <td>ifName:</td> <td>em0</td> </tr> <tr> <td>Max Speed:</td> <td>1000.0 Mbits/s</td> </tr> <tr> <td>Ip:</td> <td>192.168.0.3 ()</td> </tr> </table> </div>
Приведен пример для первого интерфейса ifInErrors.1, в случае второго интерфейса будет соответственно ifInErrors.2 ну и тд.