вторник, 20 января 2015 г.

Кластер серверов приложений Oracle WebLogic Server забивает сеть при возникновении проблем

Не все администраторы знают, что по-умолчанию экземпляры сервера приложений Oracle WebLogic Server ведут логи не только в своих каталогах DOMAIN_HOME/server/SERVER/logs, но и пересылают их по сети на сервер администрирования домена. Это сделано для облегчения работы людей: если у вас домен из нескольких десятков экземпляров сервера приложений, то очевидно, что иметь все логи доступными в одном месте очень удобно. Но за данное удобство приходится платить.

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

На небольших доменах (4 - 8 экземпляров) я отключал/отключаю пересылку логов на сервер администрирования. В консоли администратора необходимо в настройках каждого управляемого сервера выставить свойство Domain log broadcaster:, Severity level на странице Environment -> Servers -> SERVER -> Logging -> General, Advanced в значение Critical или даже более жесткое.


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

Для включения фильтрации необходимо создать один или несколько фильтров логов. Фильтры создаются для всего домена на странице DOMAIN -> Configuration -> Log Filters.


При создании нового фильтра достаточно задать его имя.


Если затем перейти в новый созданный фильтр, то с помощью кнопок на панели Expression можно сформировать условие фильтрации.


После редактирования условия нужно не забыть нажать кнопку Save. Отредактированный фильтр вместе с условием станет доступен на таблице Log Filters.


Теперь его можно назначить для свойства Domain log broadcaster:, Filter на странице Environment -> Servers -> SERVER -> Logging -> General, Advanced.


После проведения данных манипуляций шторм логов должен если не совсем сойти на нет, то значительно ослабиться, после чего можно будет приступить к решению вызвавших его проблем в работе приложения.

Понравилось сообщение - подпишитесь на блог

четверг, 15 января 2015 г.

Механизм ограничений на импорты в Eclipse (Access restriction)

Возможно каждый использующий интегрированную среду разработки Eclipse SDK программист сталкивался с подобной ошибкой: Access restriction: The type JLabel is not accessible due to restriction on required library ..\lib\rt.jar


Механизм ограничений на импортируемые классы появился в Eclipse 3.1 и предназначен в первую очередь для разработчиков плагинов, чтобы бить по рукам за доступ ко внутренним API бандлов. Выглядят данные ограничения следующим образом: в (Project) Properties -> Java Build Path -> Libraries -> JRE определены Access Rules для всей JRE или для каждого jar'а внутри данной JRE. По-умолчанию проект создается в среде исполнения (Execution Environment) JavaSE-1.7, которая накладывает ограничения на rt.jar - запрещены все пакеты javax.* кроме 160+ базовых.


Проблема с классами из Swing может возникнуть, если в результате экспериментов разработчик выставит в качестве Execution Environment или JRE-1.1, или вообще какие-то CDC/OSGi-Minimum. При работе с классами Eclipse проблема может возникнуть при попытке использования неразрешенных классов.

Можно отказаться от использования Execution Environment и при создании проекта выбирать опции JRE - Use a project specific JRE или Use default JRE. Все советы вида "удалите из проекта System Library, а потом руками добавьте ее" основаны именно на этом - замените Execution Environment на просто JDK.

При необходимости можно изменить поведение Eclipse, для этого есть два пути:

Windows -> Preferences -> Java -> Compiler -> Errors/Warnings

(Project) Properties -> Java Compiler -> Errors/Warnings


Нужно поменять значение у опции Forbidden References на Warning (по-умолчанию - Error), но делать это нужно в самом крайнем случае.

Для получения более подробной информации можно посмотреть данный пост или этот вопрос на Stack Overflow.

Понравилось сообщение - подпишитесь на блог