Я помогаю поддерживать сайт Rails.Он работает на JRuby 1.5.5, Rails 2.3.10, на машине Solaris Sparc.У меня есть проблема, связанная с ведением журнала.
Чтобы наши файлы журналов не становились слишком большими и не заполняли диск, мы используем смещение журналов, встроенное в класс Logger.В config / environment / production.rb у нас есть:
config.logger = Logger.new(config.log_path, 10, 100.megabyte)
, который должен вращать файлы журнала, когда они достигают 100 мегабайт, и хранить только 10 файлов.
Проблема двоякая:Rails не вращает журналы должным образом, и он сохраняет открытый файл журнала для записи в него - но то, что он пишет, это просто повторяющееся содержимое нескольких запросов.Поэтому, если я сделаю ls -l log
, я увижу что-то вроде этого:
-rw-r--r-- 83040892 Oct 4 15:07 production.log
-rw-r--r-- 3303158664 Oct 4 15:07 production.log.0
-rw-r--r-- 104857616 Oct 2 23:13 production.log.1
-rw-r--r-- 104857618 Oct 1 17:12 production.log.2
Обратите внимание, что последний циклический журнал все еще открыт и все еще записывается (запуск pfiles
подтверждает, что сервер Rails все еще имееттри файловых дескриптора к журналу).Также обратите внимание, что он достиг 3 гигабайт за два дня, где обычно мы используем 100 МБ в день.Это потому, что он полон повторных запросов.Я не могу легко вставить это здесь, но журнал полон того же 1000-строчного фрагмента запросов с 18:50 3 октября (который, я считаю, является точкой, в которой журналы вращаются), напечатанной снова и снова.Исходя из прошлого опыта, файл журнала будет продолжать заполняться этим повторяющимся содержимым, пока диск не заполнится.
Является ли смещение журнала / запись в Rails просто поврежденной?(В нашем использовании лог-файла нет ничего странного: мы не ведем прямую регистрацию, все это происходит из инфраструктуры Rails.) Очевидный следующий шаг - попробовать что-то вроде logrotate, но если Rails отказывается закрывать старые файлы журнала ипишет им навсегда, я подозреваю, что это не решит мою проблему (потому что журнал никогда не будет закрыт, и, следовательно, дисковое пространство никогда не восстановится).