У меня проблемы с ОЗУ при запуске моей программы Java на сервере. Я думаю, что проблема связана с тем, что я пишу файлы журналов, которые могут быть довольно большими (более 100 МБ). Я ищу эффективный способ сделать это, и я запутался в различных доступных вариантах.Сохранение ОЗУ при записи файлов журнала
После того, как смотреть на Oracle documentation, я видел, что смыва поток может быть полезным, но я не уверен, какой из различных классов я должен идти. В настоящее время я использую PrintWriter class, который вызывает проблему с ОЗУ, и я ищу лучшую альтернативу.
У меня есть вопрос о промывке потока. Из того, что я понял, строки добавляются к потоку, а затем очищаются после вызова метода или при превышении кэш-памяти. Поскольку я пишу файлы журналов, я не думаю, что это хорошее решение, потому что если в какой-то момент программа выйдет из строя, я хотел бы знать, каков был ее последний статус. Я прав?
я могу видеть, что PrintSteam класс имеет конструктор, который требует Writer и логическое рассказывал ли AutoFlush должна быть активирована или нет. Класс FileWriter (наследующий от Writer) также имеет . Напишите и метод flush, поэтому я смущен. Что происходит, когда я создаю FileWriter, передать его в PrintSteam и установите AutoFlush к истинной на PrintStream? Является ли autoflush действительно активным, я имею в виду, что это неявно вызывает flush метод FileWriter?
И наконец, какой класс я должен использовать для записи файлов журнала? Опять же, моим приоритетом является сохранение ОЗУ и возможность легко отслеживать сбои/ошибки. Должен ли я идти за небуферным подходом.
Благодаря
EDIT: Вот то, что мой код выглядит следующим образом:
output = new PrintWriter(filename, "utf-8");
output.println("Some info");
Вам нужно использовать профилировщик, чтобы быть уверенным, что проблема связана с тем, что вы регистрируетесь. Я не могу себе представить, что ведение журнала является реальной проблемой, если вы не используете какое-то асинхронное ведение журнала, которое хранит журналы в памяти. – Augusto
@Augusto Я узнал, что когда программа убита системой, файл журнала отсутствует, что заставляет меня думать, что оно сгенерировано в конце выполнения или через некоторое время. Кроме того, программа выполняет одни и те же вещи снова и снова в цикле, и только через полчаса ее убивают. Единственное, что меняется, это размер зарегистрированных данных, поскольку повторяются одни и те же инструкции. Как вы думаете? – user1319182
Если что-то сумасшедшее сделано (например, огромный буфер), запись в файл не вызывает проблемы с памятью. – Henry