Здравствуйте, zaufi, Вы писали:
Z>Здравствуйте, rip_someday, Вы писали:
_>>Нужно:
_>>проанализировать подходы к эффективной запись в лог-файлы
_>>в том числе с использованием асинхронной записи.
_>>Лично мне кажется, что замена текущей (весьма медленной и корявой) имплементации "fopen-fwrite-fclose на каждую строку"
_>>на имплементацию с постоянно открытым файлом, буффером в ~64Кб и периодическим сбросом на диск вполне будет достаточно
_>>(по крайней мере судя по замерам — в 30-40 раз быстрее)
Z>Адназначна ДА! Делать окрытие файлов для записи строки в лог это УЖОС! Конечно же файлы нада держать вседа открытыми! Правда в случае fopen/fwrite/fclose делать свой буфер не есь хорошо... он уже там есть (и его размером мона поиграца еси я все прально помню из info по libc)! Собственный буфер имеет смысл при low level I/O -- open/write/close...
я так и сделал, ну не совсем же я дурак все-таки
Z> и лучше его сделать побольше!
-- порядка 1.5М (зависит конечно от скорости заполнения буфера и того насколько страшно потерять нефлашеный лог в случае непредвиденных обстоятельств
-- но основной смысл в том что писать нада риальна МНОГО -- контроллеры винчей порой имеют кэш 8 и более М -- нет повода стеснять себя килобайтами...
в принципе размер буффера можно подобрать потом, даже лучше сделать конфигурируемым.
_>>3. можно ли это сделать как-то иначе?
Z>конечно! оставь работу с логами на долю того кто под это заточен!
-- а имена syslog демон
Z>означеная мегапрога генерила порядка 1Г (или даже больше -- точную цыфру не вспомню -- но РИАЛЬНА ДОФИГА) зипаных логов в день -- не все сислоги такое выдерживают.. но есь один который более менее работал в подобных условиях
-- это был syslogng
спасибо за идею, возможно имеет смысл.
кстати необходимая интенсивность записи может измеряться сотнями метров в час.