Я в 2.2.3 такого не замечал (пакет из debian).
Но на 2.2.5+ (сейчас 2.2.7) пулер забит на 75% при 500 процессах. Уже все перекрутил все так и держится на 75%
Сейчас очень редко очередь прыгает выше 100 элементов
Количество узлов сети — 875
Количество элементов данных — 70101
Все это на одном сервера с 6 ядрами 16 Gb RAM и MD RAID10 (4 винта)
А какая версия SNMP?.. У меня SNMPv3 и как я понял bulk request это для v2 и v3 only.
Собственно ошибка плавающая. Тот же bulk request поэтому и использует механизм подбора максимального числа итемов в запросе, потому что разное оборудование по разному реагирует на это.
Что касается забитого пулера то интереснее new values per second
В принципе узкие места заббикса прекрасно известны: БД, диск, сеть.
Я в свое время упирался в БД, дефолтные настройки того же MySQL конечно ни о чем.
SNMPv2 и кое где SNMPv1
Требуемое быстродействие сервера, новые значения в секунду — 710.89
Сеть — отметаем там гигабит, а используется около 1-2 мегабита
Диск — очень радко wa бывает 5-10%
БД — может быть, но я до 1500 значений доводил все было также.
а увеличение числа поллеров не приводит к снижению занятости?.. и я бы еще в сторону таймаута посмотрел бы. У меня была проблема похожая, я сначала решал ее увеличением таймаута (и все было плохо), а потом просто переделал алгоритм получения «медленных» значений.
ну у меня есть определенные параметры, у которых плавающее время получения значения, зависит от нагрузки на сервер и т.д.
Чтобы не подвисали процессы из-за длинных таймаутов (это же сквозная настройка), я написал отдельный скрипт, который получает эти значения и складывает их в определенные файлики по формату. А заббикс уже из файла выдергивает (это быстро понятное дело). Такой немного «топорный» механизм, но мне очень помог.
про прокси, я же не против ;) в самом начале Update release про это написано, просто для создания настроения написано, что все пошло не так с самого начала.
Если есть желание и сможете по пунктам описать как воспроизвести проблему, могу озадачить вопросом разработчиков (у нас коммерческая поддержка). В личку.
тогда понятнее…
но в моем случае практически все устройства были затронуты этим багом.
Не пострадали только девайсы у которых мало SNMP метрик, типа роутеров с малым количеством туннелей и проч.
а как я уже написал сама идея очень зачетная не хотелось ее терять
2.2 это LTS версия. Кроме того, 2.4 не было у меня в портаже на тот момент.
Я конечно могу и из исходников все собрать, но суппорт этого потом будет очень «дорогой».
Кстати посмотрел исходники 2.4.1 там эта проблема тоже в наличии.
Ну так идите в support.zabbix.com, заведите тикет, приложите свой патч. Скорее всего ответят что в 2.4.3 для одиночных значений bulk выключен и попросят обновиться :-)
+
насчет патча… у меня слишком прямолинейное решение. нет оно работает, и работает хорошо, но правильнее делать по другому. Нужно во-первых проверять msgMaxSize, во вторых генерировать согласно этому msgMaxSize запросы, и только потом уже обрабатывать ошибку. У меня патч это такой финт ушами, который ловит ошибку, и пользуется имеющимся механизмом подбора размера bulk.
Если честно, я так и не понял, в чём заключается проблема, кто и где неправ, как это решено (ну не понимаю я код на Цэ) и как надо было решать. Поэтому и предлагаю пообщаться с разработчиками для всеобщей пользы. Но подозреваю что в 2.4.x сия проблема уже решена другим методом (или проявляется лишь в редких условиях).
Спасибо за интересную статью. Открыли тикет support.zabbix.com/browse/ZBX-9163. Скорее всего проблема существует как в 2.2.x так и 2.4.x. Будем исправлять.
Кстати если инстанс большой — рекомендую сразу перевести БД прокси на mysql. С sqlite вы сначала упретесь в производительность дискового I/O, потом перенесете БД на рамдиск и в конце поймаете что-нибудь такое.
p.s. В оф. репе LTS ветки недавно появилась версия 2.2.8.
Как я патчил Zabbix