URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3419
[ Назад ]

Исходное сообщение
"Посоветуйте что использовать."

Отправлено yuranich , 27-Сен-04 23:11 
Есть приложение. Работает круглосуточно.
Выдает на консоль много отладочной информации.
Неплохо было бы всю эту инф. записывать в файл,
но не хочется слишком часто делать запись в файл,
наверно это будет тормозить систему.

Можно ли записывать во чтоо-то типа RAM, и
раз в минуту перегонять это в файл???


Содержание

Сообщения в этом обсуждении
"Посоветуйте что использовать."
Отправлено Matracc , 28-Сен-04 00:28 
ммм...
Что, тааак много отладочной информации? Кто же это тааак быстро анализирует, притом круглосуточно? Что-то неверю, что такие объемы, которые способны загрузить систему, кому-то очень необходимы во всей целостности.
Делай более-менее читаемый формат вывода и пищи в файл.
Если не хочешь, кажется есть что-то типа syslogd - почитай. Это демон, собирающий логи (кажется так).

"Посоветуйте что использовать."
Отправлено dimus , 28-Сен-04 07:15 
Если не хочешь использовать syslogd, то можно просто организовать большой буфер и пару потоков. Один пишет данные в буфер и когда дойдет до конца - переходит к началу, т.е. буфер кольцевой. Второй поток ждет, когда будет достигнут конец или середина буфера, и когда это событие происходит, записывает на диск тот кусок, который только что закончил заполнять первый поток. Недостаток - при внезапном отрубоне питания важная отладочная информация будет утеряна. Достоинство: обращение к диску будет происходить довольно редко.

"Посоветуйте что использовать."
Отправлено SergeiZz , 28-Сен-04 09:34 
>Если не хочешь использовать syslogd, то можно просто организовать большой буфер и
>пару потоков.
Классическая задача "один писатель -- один читатель". Пример есть у
Стивенса, да и в куче других мест.

Но ведь стандартная библиотека ввода/вывода и так буферизована, и размер
буфера можно менять, и сбрасывать на диск можно по требованию...

Кстати говоря. Если файл остался незакрытым в момент выключения питания,
двнных в нём может и не оказатся вовсе, независимо от того, как недавно
была выполнена последняя операция записи. Здесь и принудительный сброс на
диск не поможет.
Я писал такую утилитку, которая закрывала периодически файл с важной
информацией, но чтобы не перегружать систему делала это реже, когда в
системе выполнялось много процессов (высокий load).


"Посоветуйте что использовать."
Отправлено dimus , 28-Сен-04 12:01 
А что, sync не помогает?

"Посоветуйте что использовать."
Отправлено SergeiZz , 28-Сен-04 12:56 
>А что, sync не помогает?
Помогает. Только, конечно, fsync(): сбрасывать на дист только данный файл,

Именно открытие и закрытие нужно было по другому поводу -- я, кажется,
напутал с воспоминаниями...


"Посоветуйте что использовать."
Отправлено Vladislav Lazarenko , 28-Сен-04 14:22 
>Есть приложение. Работает круглосуточно.
>Выдает на консоль много отладочной информации.
>Неплохо было бы всю эту инф. записывать в файл,
>но не хочется слишком часто делать запись в файл,
>наверно это будет тормозить систему.
>
>Можно ли записывать во чтоо-то типа RAM, и
>раз в минуту перегонять это в файл???

Просто так делаешь и ничего тормозить не будет.

bash# program.elf > /error.log 2>&1

Все кэшируется, так что не бойся, а вот выводить на консоль - это тормоз.


"Посоветуйте что использовать."
Отправлено Alexander S. Salieff , 28-Сен-04 18:01 
>>Есть приложение. Работает круглосуточно.
>>Выдает на консоль много отладочной информации.
>>Неплохо было бы всю эту инф. записывать в файл,
>>но не хочется слишком часто делать запись в файл,
>>наверно это будет тормозить систему.
>>
>>Можно ли записывать во чтоо-то типа RAM, и
>>раз в минуту перегонять это в файл???
>
>Просто так делаешь и ничего тормозить не будет.
>
>bash# program.elf > /error.log 2>&1
>
>Все кэшируется, так что не бойся, а вот выводить на консоль -
>это тормоз.

Абсолютно верно. Не для того EXT3 с дефолтными настройками жрет сотни метров памяти под буфера, чтобы еще самостоятельно озадачиваться буферизацией в подобных случаях ;)
Перед тобой встанет другая проблема - синхронизация твоей проги и лог-ротатора, чтобы не терялись граничные данные.