У нас есть веб-приложение, созданное на Java, которое использует struts2, spring и JasperReport. Это приложение работает на стеклянной планете 4.0.
Библиотеки приложения находятся в папке WEB-INF/lib, а также в glassfish установлены на 4 больше, чем на те же библиотеки.
Glassfish настроен на использование 1024mb для heapspace и 512m для permgen, а большая часть потребления памяти, когда я использую библиотеки для каждого приложения, - в действиях struts и spring aop classes (с использованием профилировщика netbeans).
Проблема, с которой мы сталкиваемся, - это объем памяти, потребляемый из-за наличия библиотек в загрузчике классов для каждого приложения, потому что он является высоким и генерирует ошибки PermGen, и мы также заметили, что приложение работает медленнее с большим количеством пользователей.
из-за этого мы пытаемся использовать разделяемые библиотеки, помещаем его в папку domain1/lib и обнаруживаем, что при одном развернутом приложении время загрузки и потребление памяти значительно ниже, и приложение работает быстрее в целом. Но когда мы развертываем остальные приложения на сервере, только первое загруженное приложение работает хорошо, а остальное имеет ошибки, когда мы вызываем действия struts2. Мы считаем, что это связано с тем, что каждое приложение имеет несколько разные настройки на struts2 и log4j.
Мы также пытались помещать только определенные библиотеки на стеклянную рыбку и оставляем только struts2 в приложении, но он показывает ошибки InvocationTargetException, потому что все библиотеки зависят от lib от apache-common, и не имеет значения, если мы поместим эти библиотеки на одном или другом месте, Также, если мы поместим его в оба места, приложение не запустится.
- Есть ли какие-либо специальные настройки или рекомендации по использованию разделяемых библиотек?
- Есть ли способ использовать разделяемые библиотеки, но загружать настройки для каждого приложения? или мы должны изменить настройки, чтобы сделать их одинаковыми?