позвольте мне сначала описать, что мы делаем:
Наш Tomcat обслуживает около. 2300 файлов JSP. Эти файлы генерируются каждую ночь (даже если они не меняются) с сервера управления контентом и копируются в каталог tomcat. Время от времени tomcat перестает работать, потому что не было доступного места в куче.
Мои наблюдения:
Следующая часть кучи продолжает увеличиваться:
одновременная генерация метки-развертки: емкость = 8018026496 (7646,5859375 МБ) использовано = 5234557528 (4992,06307220459 МБ) бесплатно = 2783468968 (2654,52286529541 МБ) 65,28486193717862% использовано
После перезапуска Сервера эта цифра увеличивается примерно до 30% в течение дня и увеличивается до 80% ночью (один раз в 2:15 утра и один раз в 4:00 утра). Развертывание новых JSP было выполнено накануне в 23:00.
Мой подход к обнаружению проблемы:
Я запустил 2 дампа в все еще работающей системе. Они были сняты с интервалом 24 часа. Я проанализировал их по отдельности и сравнил их друг с другом.
Посмотрев на сохраненный размер:
Лучшие кандидаты.
Эти Heapdump были также загружены в анализатор памяти Eclispe. Этот инструмент подсказал мне:
Один экземпляр org.apache.jasper.servlet.JspServlet, загруженный с помощью org.apache.catalina.loader.StandardClassLoader @ 0x594cc5300, занимает 962.914.048 (88,21%) байт. Память накапливается в одном экземпляре "java.util.concurrent.ConcurrentHashMap $ Segment []", загруженном "".
Это привело меня к следующей информации:
Оба наблюдения заставили меня поверить, что кешированные JSP загрязняют кучу, и я принял меры, перенастроив сервер tomcat.
Я установил параметр maxLoadedJsps на 2000 и перезапустил сервер. Это было своего рода лекарство. Все еще прыгает в 4 часа утра, но теперь только на 60%. Итак, мое изменение кое-что улучшило, но, учитывая, что JVM имеет доступную кучу 16 ГБ, это кажется немного неудовлетворительным. Во-первых, он все еще медленно поднимается, и я хотел по возможности уменьшить Heapspace для Jvm.
Я ищу немного больше понимания связи между моим чтением кучи и поведением tomcat / jasper?
Я думаю, что для tomcat все недавно развернутые JSP должны быть кэшированы, кроме устаревших, которые он уже кэширует. И я думаю, что это кеширование происходит, когда, возможно, Google сканирует сайт в течение ночи. Дважды помещаем почти весь JSP в кеш.
Может (возможно) кто-то подтвердить, что мои предположения не совсем ошибочны, и если это так, подскажет мне лучшее объяснение. Поскольку он содержит конфиденциальные данные, я не могу публиковать данные кучи. Но, возможно, у некоторых есть подсказки для их лучшего анализа.
Спасибо за вашу помощь. Томас