Мониторинг JVM

November 6th, 2009

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

Именно поэтому, к жизненным показателям, которые наблюдаются на работающем сервере приложений прежде всего, относятся уровни текущего использования памяти виртуальной машины. Самый важный из них для «долгоиграющих» JVM — Old Gen Used Space по отношению к Old Gen Max Size. Дело в том, что утечки в Perm Gen становятся заметны сразу в силу его небольшого размера, а Young Gen утечек не покажет никогда. Именно в Old Gen накапливаются все те «утёкшие» объекты, на которых начинает буксовать Full GC, останавливая все прикладные потоки.

Именно поэтому, разрабатывая и развивая большие информационные системы на Java, приходится задумываться над тем, как грамотно “слушать пульс” JVM. В этой статье я сделаю небольшой обзор различных подходов к решению этой задачи, после чего обосную свой личный выбор.
Read more…

Статьи , ,

Доклад на третьей Интернет-неделе

September 15th, 2009

Дорогие друзья! Хочу напомнить, что меньше, чем через неделю состоится третья Сибирская Интернет-неделя. Если вам повезло быть 21-28 сентября в Новосибирске, а так же если вы имеете возможность там оказаться по собственному желанию, настоятельно рекомендую посетить это мероприятие, поскольку ничего даже близкого к этому по качеству за Уралом нет.

В этот раз ожидается чуть ли не в три раза больше народу, чем в марте, когда конференция проходила в прошлый раз. Программный комитет потрудился на славу, особенно это касается «коммерческих дней», где доклады будут идти в два потока, но и в технологической секции отнюдь не пусто: среди всего прочего, будет несколько специально приглашённых знаменитостей. В этой заметке я хочу сделать рекламу нескольким интересными, на мой вкус, докладам и, уже по традиции, подарить всем желающим скидку :)
Read more…

Заметки

Git и Subversion

August 2nd, 2009

Второй день в свободное время занимаюсь освоением Git. Толкнула мне на это нужда. Есть один проект, над которым я работаю на досуге. Весь исходный код проекта управляется Subversion, который стоит на одном американском сервере. При пинге около 200 мс. любая нелокальная операция растягивается на ощутимый срок, поскольку работа с репозиторием через протокол WebDAV очень «многословна».

Это сводит на нет все преимущества системы управления версиями, поскольку даже делать коммиты хочется как можно реже, не говоря уже о том, чтобы активно пользоваться ветками под всякие эксперименты, которых у меня предостаточно… Я даже дошёл до того, что начал создавать локальные копии на диске всего каталога проекта!
Read more…

Заметки ,

InheritableThreadLocal

July 21st, 2009

Не знаю как у вас, а для меня даже в базовом наборе стандартных классов JDK то и дело случаются открытия. Вот например пару дней назад, разглядывая внутренности IceFaces, я наткнулся на доселе неизвестный мне класс в стандартной библиотеке: java.lang.InheritableThreadLocal.

При ближайшем рассмотрении это оказалось расширением обычного java.lang.ThreadLocal, но с возможностью наследования. Напомню, что ThreadLocal это «держатель» ссылок, позволяющий одновременно хранить разные значения для разных потоков. Типичным способом использования ThreadLocal является хранение контекстуальной информации. Характерные примеры: текущая сессия Hibernate, контекст безопасности для Acegi, объекты IoC-контейнера в области действия типа request и т.п.

В случае ThreadLocal, если вы сохранили в нём какое-то значение, единственный, кто может до него добраться — тот же самый поток. Для всех остальных потоков ваше значение недостижимо. Класс InheritableThreadLocal расширяет этот механизм, дополняя область видимости некоторого значения всеми потоками, порождаемыми текущим.

Если ваш код интенсивно порождает дочерние потоки для распараллеливания операций, то это чрезвычайно удобный механизм для того, чтобы передать туда свой контекст. Конечно с сессией Hibernate лучше так не делать, потому что её использование непотокобезопасно, но вот с контекстом безопасности может получиться очень хорошо. В частности, в Spring есть класс с неприлично длинным названием InheritableThreadLocalSecurityContextHolderStrategy, который, как видно из имени, распространяет общий SecurityContext на все порождаемые потоки.

Заметки ,

Конец отпуска

July 11th, 2009

Заканчиваю свой отпуск и возвращаюсь вести этот блог на регулярной основе. За время отсутствия со мной произошло много всего интересного, среди чего хочу особо отметить:

  • Я сменил постоянного работодателя. С позиции главного инженера-разработчика в необъятных размеров новосибирской IT-компании, работающей в финансовой сфере, я перешёл на позицию архитектора информационных систем в стартапе умеренных размеров, специализирующемся на биллинговых и рассчётных системах. Теперь могу сказать наверняка, дорогие друзья, наличие блога и ссылка на него в резюме реально помогает на всех этапах этого процесса!
  • Буквально вчера получил подтверждение от организаторов «сибирской интернет недели», что мой доклад включён в программу грядущем в сентябре очередном экземпляре этой замечательной во всех отношениях конференции. Рабочее название: Cloud Computing: концепция, технология и экономика. Так что если эта тема вам интересна и вы собираетесь оказаться в сентябре в Новосибирске, то можете считать это приглашением. Ближе к делу я непременно опубликую развёрнутую тезисную программу и, даст Бог, скидочный купон, так что «оставайтесь с нами».

Объём и ритм работы на новом месте существенно превосходит прежний как по количеству, так и по качеству, поэтому обязательство радовать своих постоянных читателей свежим постом раз в 2-3 дня я на себя взять не могу. Однако постараюсь делать это не реже одного раза в неделю. Тем более, что за время отпуска у меня накопилось несколько зарисовок и любопытных мыслей, которые очень хотят оказаться на страницах этого сайта.

Заметки