После установки WebCenter Spaces возникает вопрос, почему система требует так много системных ресурсов даже без нагрузки? Резонный ответ на это – что стандартная инсталляция рассчитана на продакшн использование. Безусловно, в каждом конкретном случае использования, характеристики системы могут быть значительно улучшены путем тонкой настройки в зависимости от условий использования. Сегодня мы остановимся на тюнинге системы в самом базовом и, в то же время, немаловажном варианте – работе при малых нагрузках или вообще без нагрузки – вариант для изучения, разработки и функционального тестирования.
Итак, что же можно предпринять, чтобы умерить аппетиты установленной системы? В исходном варианте, сразу после установки, система требует не менее 3-4 Гб оперативной памяти для работы всех компонентов. Процессорные ресурсы же расходуются весьма скромно, и наибольшая часть процессорного времени тратится на запуск системы и первичную компиляцию кода страниц (напомню, что JSP страницы, да и не только они, компилируются “на лету”, при первом обращении к ним). Таким образом, второе и последующие обращения к странице обрабатываются намного быстрее и пристойно работают практически на любом современном процессоре. Таким образом, основная задача – сократить объем занимаемой оперативной памяти без существенного ущерба для производительности в целом. В идеале – заставить систему полноценно работать на машине с 2 Гб оперативки. Здесь можно дать следующие практические рекомендации, исходя из моего опыта:
- Выбирать JRockit JVM при установке и создании домена WLS. Эксперты утверждают, что эта JVM работает, в конечном итоге, быстрее, чем Sun JVM благодаря run-time оптимизации. По субъективным ощущениям это действительно так. Но самое важное, что JRockit лучше управляет памятью, и WLS работает на ней стабильнее. В частности, при использовании Sun JVM в ряде случаев появляется ошибка java.lang.OutOfMemoryError: PermGen space, избавиться от которой можно просто-напросто перейдя на JRockit.
- При установке WebCenter создается домен WLS с четырьмя серверами в нем. Это удобно с точки зрения управляемости (можно запускать и останавливать срвисы независимо друг от друга), но влечет существенные (особенно в рассматриваемом случае) накладные расходы, от который можно избавиться. Для этого необходимо перенести все приложения в домене на один сервер, а именно AdminServer. Для этого заходим в консоль WLS (http://hostname:7001/console), при этом нет необходимости запускать что-либо кроме WLS AdminServer (StartWeblogic.cmd или .sh). В меню Deployments видим всевозможные приложения и библиотеки, которые развернул для нас установщик. Наша задача перенести их на сервер AdminServer без потери работоспособности. Для этого поочередно кликаем на приложения и библиотеки, меню Targets, ставим галочку на AdminServer, Save. Так необходимо перенести все приложения. Понять, что приложение перенеслось и работает можно по наличию признака Active в списке Deployments, для приложений еще должен быть признак ОК в колонке Health. При этом не забываем переводить сервер в режим Lock&Edit, а изменения сохранять небольшими порциями. Если приложение перенеслось, но не активировалось, его можно запустить вручную в меню Control, Start, Start servicing all requests. В конечном итоге, все приложения и библиотеки должны быть перенесены на AdminServer, иметь статус Active для всех и OK для приложений. Это автоматически означает, что все успешно перенесено, т.к. все остальные серверы в этот момент должны быть выключены.
- Небольшое количество памяти можно сохранить и при уменьшении количества открытых соединений с базой в Connection Pools. Кроме того, все Data Source должны быть перенесены на AdminServer. Для этого заходим в меню Services->JDBC Data Sources и поочередно заходим в настройки каждого из DS. В настройках добавляем в Targets AdminServer, а также меняем Initial Capacity на 1, Max Capacity на 5.
- Можно уменьшить размер heap для JVM (по умолчанию стоит 512 и 1024Mb), но есть риск, что Garbage Collector будет запускаться слишком часто или вообще получить OutOfMemory Exception.
- Также можно уменьшить размер памяти базы, поставив memory_target ~200Mb
После выполнения этих нехитрых операций, размер занимаемой памяти сокращается весьма значительно. В моем случае, виртуальная машина на линуксе с базой, UCM и всеми сервисами WebCenter работала на 1600Мб памяти.