У меня есть сервер Tomcat 6 на сервере Ubuntu 12.04 с 4 ГБ и следующими JAVA_OPTS
JAVA_OPTS = "- Djava.awt.headless = true -Xms512M -Xmx512M -XX: PermSize = 1024M -XX: MaxPermSize = 1024M -XX: + CMSClassUnloadingEnabled -XX: + CMSPermGenSweepingEnabled"
Тупой вопрос: если я разверну один и тот же веб-приложение (один и тот же файл войны) несколько раз (каждый ссылается на другую базу данных Postgres) - как server.com:8080/webapp1 server.com:8080/webapp2 и т. Д ...
Могу ли я предположить, что Tomcat будет кэшировать файлы классов один раз в нескольких веб-приложениях? Или - кэширует ли Tomcat классы для каждого веб-приложения?
Заранее спасибо Дэнни
Ответ зависит от того, где вы разместили файл (ы) класса, используемый вашим веб-приложением.
Если вы поместите данный класс в общий путь загрузчика классов Tomcat в $ CATALINA_HOME / lib, он будет доступен для всех веб-приложений. То же самое и с его кешированной формой.
Если вы используете путь к загрузчику классов веб-приложений Tomcat в webapps /webapp/ WEB-INF / классы и веб-приложения /webapp/ WEB-INF / lib классы и соответствующие кеши классов изолированы между приложениями.
Техническое образование
Tomcat не соответствует тому способу, которым Java изначально обрабатывает классы, но использует собственный загрузчик классов Java. Это необходимо для обеспечения ряда функций, связанных с:
Загрузчик пользовательских классов Tomcat использует загрузчики классов Java по умолчанию Bootstrap, Extension и System, но заменяет переменную пути к классам, используемую загрузчиком классов System, на свой собственный путь к классам. Это имеет эффект:
добавление двух дополнительных загрузчиков классов в конце иерархии загрузки классов Java:
Tomcat игнорирует исходный путь к классам.
Ключевой деталью является то, что загрузчик классов webapp не делегирует сначала загрузку класса своим родителям, а пытается загрузить каждый класс по запросу. Каждый загруженный класс впоследствии кэшируется рассматриваемым загрузчиком классов webapp. Этот уровень загрузчика классов / кеша нельзя использовать совместно с веб-приложениями.
Класс Everything, загруженный загрузчиком общих классов, становится общедоступным для всех веб-приложений, включая кеш. Расширенное размещение классов в пути к загрузчику общих классов не рекомендуется, поскольку оно:
К процессу загрузки / кеширования / перезагрузки класса прилагается довольно много мелкого шрифта. Если это важно, я предлагаю прочитать замечательную главу о загрузке классов в Профессиональный Apache Tomcat 6.
Сжатая версия была написана кем-то на этот страница.