Назад | Перейти на главную страницу

В Tomcat 7 заканчивается пространство кучи

позвольте мне сначала описать, что мы делаем:

Наш 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 []", загруженном "".

Это привело меня к следующей информации:

https://stackoverflow.com/questions/10436573/jvm-heapdump-the-memory-is-accumulated-in-one-instance-of-java-util-concurrent

Оба наблюдения заставили меня поверить, что кешированные JSP загрязняют кучу, и я принял меры, перенастроив сервер tomcat.

Я установил параметр maxLoadedJsps на 2000 и перезапустил сервер. Это было своего рода лекарство. Все еще прыгает в 4 часа утра, но теперь только на 60%. Итак, мое изменение кое-что улучшило, но, учитывая, что JVM имеет доступную кучу 16 ГБ, это кажется немного неудовлетворительным. Во-первых, он все еще медленно поднимается, и я хотел по возможности уменьшить Heapspace для Jvm.

Я ищу немного больше понимания связи между моим чтением кучи и поведением tomcat / jasper?

Я думаю, что для tomcat все недавно развернутые JSP должны быть кэшированы, кроме устаревших, которые он уже кэширует. И я думаю, что это кеширование происходит, когда, возможно, Google сканирует сайт в течение ночи. Дважды помещаем почти весь JSP в кеш.

Может (возможно) кто-то подтвердить, что мои предположения не совсем ошибочны, и если это так, подскажет мне лучшее объяснение. Поскольку он содержит конфиденциальные данные, я не могу публиковать данные кучи. Но, возможно, у некоторых есть подсказки для их лучшего анализа.

Спасибо за вашу помощь. Томас