Дамп потока не генерируется на JBoss - PullRequest
1 голос
/ 02 апреля 2009

Я использовал для генерации дампов потоков команду kill -quit, и я получал их в файле журнала, где были журналы моего сервера. Когда файл стал слишком большим, я удалил его с помощью команды rm и создал новый файл с тем же именем. Теперь, когда я использую kill -quit для получения дампов потоков, в файл журнала ничего не копируется - он пуст.

Кто-нибудь может помочь?

Ответы [ 3 ]

3 голосов
/ 28 мая 2009

Скрипты запуска JBoss по умолчанию в Unix обычно выглядят примерно так:

nohup $JBOSS_HOME/bin/run.sh $JBOSS_OPTS >/dev/null 2>&1 &

Это прискорбно, потому что он посылает stderr в / dev / null. Обычно это не проблема, поскольку после инициализации log4j большая часть выходных данных приложения отправляется в boot.log или server.log. Однако для дампов потоков и других ошибок низкого уровня они теряются.

Лучше всего изменить сценарий запуска, чтобы перенаправить stdout и stderr в файл. Кроме того, одна вещь, которая упускается из виду при настройке по умолчанию, это перенаправление stdin. Для процессов-демонов рекомендуется перенаправить стандартный ввод в / dev / null. Например:

nohup $JBOSS_HOME/bin/run.sh $JBOSS_OPTS >> console-$(date +%Y%m%d).out 2>&1 < /dev/null &

Наконец, если у вас запущен процесс, вы можете использовать jstack, который включен в JRE, чтобы получить дамп потока. Это выведет на консоль, из которой он вызван. Я предпочитаю вывод из kill -3, но jstack также позволяет просматривать собственные кадры стека.

1 голос
/ 25 апреля 2009

Если вы зайдете в jmx и найдете jboss.system: service = Logging, type = Log4jService, вы можете затем вызвать метод переконфигурирования, который должен заставить log4j повторно открыть любой из его файлов журнала. Тогда команда kill -quit должна работать.

1 голос
/ 02 апреля 2009

Если это * nix, при удалении файла все, у кого этот файл все еще открыт, продолжат запись в старый (теперь отсутствует) файл. Файл будет действительно удален только тогда, когда все файловые дескрипторы к нему будут закрыты.

Вы должны будете заставить JVM закрыть и заново открыть файл журнала. Не уверен, что это можно сделать без перезагрузки.

...