Новая запись в журнале-> почтовое уведомление

Существует много вещей, которыми это могло бы быть. Мой опыт, это часто происходит из-за проблем памяти. Когда используемый размер "кучи" становится большим, сборщик "мусора" входит в перегрузку, и производительность ЦП действительно страдает. Некоторые шаги для изоляции проблемы:

  • контролируйте систему, в то время как использование ЦП пронзает вершину использования. Подтвердите, что использование ЦП от Java. (К сожалению, Вы не можете быть более точными, чем это).

  • контролируйте использование размера "кучи" с VisualVM или JConsole. Нормальное поведение состоит в том, чтобы видеть размер "кучи", постепенно увеличивающийся, затем внезапно пронзив вниз, когда GC умирает (пилообразный шаблон). Если использование памяти остается высоким, оно не может быть собрано "мусор"

  • это может быть очевидно, но проверяет Ваши журналы на OutOfMemoryExceptions

  • Удостоверьтесь, что Ваша VM использует макс. возможный размер "кучи". Для JVM на 32 бита это - 1400 или 1500M. Используйте опцию-xmx1500m JVM.

  • Удостоверьтесь, что ОС не использует много памяти подкачки (сверьтесь главный или свободный). Удостоверьтесь, что это имеет соответствующую память для выполнения Linux, и Tomcat (3 или 4 ГБ хорошее начало для машины на 32 бита).

Еще одно примечание - рассматривает Ваше заявление на утечки соединения и память. Spring будет заботиться о большой части этого для Вас. Удостоверьтесь, что Вы не помещаете материал в объект HttpSession (или карта на Сессии), который не должен быть там. Если Вы делаете какой-либо прямой JDBC или обработку файла, удостоверьтесь все потоки, Соединения и PreparedStatements (это - то, что я всегда забываю), закрываются.

2
задан 4 June 2011 в 05:43
4 ответа

Это может быть сделано со сценарием удара, который выполняет следующие задачи:

  1. Имейте фоновый процесс, контролирующий каждый файл журнала с tail -f, запись вывода к буферному местоположению.
  2. Регулярно урожай, действие на и усеченный буферное местоположение.

Я использовал бы единственный сценарий, возможно, запущенный как в init сценарии, а не задании крона. Например:

#!/bin/bash

RECIPIENT=root
SUBJECT="Log monitor"
PERIOD=5    # Harvest log buffer every PERIOD seconds

# Prepare the log buffer and ensure it is empty
LOGBUFFER=/tmp/logbuffer.$$
cp /dev/null $LOGBUFFER

# Monitor the log files in the background.
# More than one log file can be specified on the command line.
for file in "$@"; do
    tail -f -n0 "$file" | while read line;do echo "$file: $line";done >> $LOGBUFFER &
done

# Harvest the log buffer
while :;do
    if [ -s $LOGBUFFER ]; then
        mail -t "$RECIPIENT" -s "$SUBJECT" < $LOGBUFFER
        cp /dev/null $LOGBUFFER
    fi
    sleep $PERIOD
done

Сценарий не прекрасен (например, он оставит a /tmp/logbuffer.123 файл, лежащий вокруг, когда это выходит), но это должно запустить Вас.

2
ответ дан 3 December 2019 в 09:23

Вы могли испытать Tenshi. Это записано в Perl, очень легком настраивать, и делает точно, что Вы запросили. Из описания пакета Ubuntu:

"Tenshi является программой мониторинга журнала, разработанной для наблюдения одного или нескольких файлов журнала за строками, соответствующими определяемым пользователем регулярным выражениям и отчету о соответствиях. Регулярные выражения присвоены очередям, которые имеют аварийный интервал и список адресатов".

Пакет Ubuntu (Ссылка), пакет Debian (Ссылка).

3
ответ дан 3 December 2019 в 09:23

Если Вы рассмотрели бы переключение на использование системного-журнала-ng, можно настроить его для автоматического запуска сценария оболочки, который может инициировать электронное письмо на основе шаблона сообщения системного журнала. Я имею в распоряжении это для входа безопасности.

1
ответ дан 3 December 2019 в 09:23

вызов кроном каждые 5 секунд

Крон не имеет гранулярности меньшей, чем минуты. Если Вы захотите такую гранулярность, то Вам будет нужен incrond. Просто имейте что-то как:

/var/log IN_CLOSE_WRITE /usr/local/sbin/notify.sh $@/$#

и сценарий, что письма Вам:

tail $1 | mail -s "New lines in: $1" root

Вам, возможно, придется играть вокруг с правильными видами событий. Но это сделает ненужным запустить сценарий синхронизированным способом. Если у Вас есть incrontab, настроенный правильно, можно быть уверены, что что-то изменится каждый раз, когда сценарий запускается.

0
ответ дан 3 December 2019 в 09:23

Теги

Похожие вопросы