Добрый день.Не так давно я спрашивал в форуме о "правильной" нагрузке системы. На всякий случай напомню ситуацию. Есть небольшая провайдерская машина на Pentium 233 с 128 Мб. памяти под FreeBSD 4.7-Release-p10 Средняя ее загрузка колеблется около 0.99 Т. к. мой вышестоящий провайдер сказал, что это очень много, начал я борьбу за ее снижение.
Мониторинг top-ом дал не очень много. В первые строки рейтинга часто вылетал Perl, но держался он там пару-тройку секунд. Мониторинг по systat дал больше - стало очевидно, что основной потребитель ресурсов - мой скрипт биллинга. Я знаю, что он не есть чудом программистской мысли, т. к. работает просто и тупо. Скрипт просчитывает вывод last -s.
Первая идея по снижению ресурсоемкости - прочитать все в массив и обсчитывать его. Какое то ускорение я получу. Но дело вообще то в том, что примерно четверть записей я должен отбросить по довольно сложному критерию. Он включает в себя многое - юзеров, работающих по определенной схеме, администрацию, входы с некоторых терминалов, ... Все это можно, конечно, определить читая строки массива и разбирая их. Но хотелось бы сделать все это максимально эффективно и красиво.
Что подскажете ?
Как вариант - отправить нужный поток логов непосредственно на вход твоего скрипта. Типа, создается "named pipe" (в линухе команда "mkfifo"), с одной стороны в него заливает syslog (настройка "|/путь/файл"), с другой стороны вешается скрипт. правда, для сохранения этого потока логов скрипт должен попутно всё прочитанное сваливать в обычный файл (в "/var/log/...").Увеличение производительности "с места" - минимизациа количества условий.
PS. А вообще такие вещи лучше на C/C++ писать.