uscr 29.05.2012 18:40
Есть вопрос! — Скрипт пинговалка. Что я сделал не так?
Возникла идея из спортивного интереса пропинговать 2000+ хостов. Под катом результат, который делает это за 17 секунд.Вопросы:
где я накосячил (ошибки в скрипте)?
чем чревато всё это (может ли повиснуть 100500 процессов в памяти)?
как ещё ускориться?
Работает это так:
скрипт готовит очередь и запускает в фоне 1 процесс скрипта-пинговалки на каждые 10 хостов. Пинговалка пингует и пишет хосты, статус которых изменился в файл. Третий скрипт слушает файл tail -f'ом и апдейтит запись в БД на каждую пришедшую строку.
Подготовка очереди:
Ну и то, что апдейтит базу не интересно смотреть.
Замена конструкций с while дала -2 секунды (забыл сказать: указанное время - это среднее после 10 замеров). Спасибо.
Вот ещё вопрос: можно ли ускорить запуск pinger.sh, т.е. убрать часть накладных расходов?
Я вот сейчас у себя провёл пару тестов ещё. Можно попробовать заменить awk на cut -d ' ' -f. Как раз для pinger'а, где оно трижды вызывается. По моим тестам экономит в среднем три секунды на 10к вызовов.
Сейчас ещё один тест проведу по pinger'у, посмотрим.
Сейчас ещё один тест проведу по pinger'у, посмотрим.
Думал об этом. Но там табуляция же. Количество пробелов ненормировано. Это нужно сначала ещё исходный файл стандартизировать...
Но там табуляция же. Количество пробелов ненормировано.
Угу, об этом я не подумал.
А эксперимент мой дал обратный результат(что удивительно), так что тут не поможет. Пока идей нет, позже ещё подумаю, может появятся мысли.
А fping < targets_file считается чистым башем?
А ещё можно не делать sed в самом первом файле, а просто сказать mysql не печатать названия колонок:
На беглый взгляд всё нормально. Я бы для наглядности, павда, `` заменил бы на $(), но это так, косметика.
С чего бы? Ведь все дочерние процессы сами завершаются вне зависимости от результата. Проблемы кучи процессов в памяти бывают, если родитель должен детей убивать, но почему-то этого не делает.
Первое, что бросилось в глаза, это вместо
сделать