Куда расходуется память в веб-приложении на Java?

На сервере запустил веб-приложение на Java и Tomcat с подключением к MySQL. Для ограничения памяти задал следующие опции:
-d64 -server -Xss128k -Xms16M -Xmx32M -XX:PermSize=32M -XX:MaxPermSize=48M -XX:ReservedCodeCacheSize=16M -XX:+UseCompressedOops

Согласно моим ожиданиям, приложении должно занимать в памяти 104Мб (с учётом 64 потоков, реально меньше).

Но после запуска java-процесс занимает примерно 200Мб (судя по полю RES утилиты top). Через нескольких часов ничегонеделания приложение уже занимает больше 300Мб (судя по тому же top'у).

Собственно, вопрос: на что расходуются эти 200Мб памяти и можно ли их как-то ограничить средствами Java?

На странице статистики Tomcat'а статистика по памяти есть, но там отражаются только те области памяти, про которые я и так знаю и которые уже успешно ограничены. В статье habrahabr.ru/post/117274 на диаграмме есть область памяти Misc, которая занимает достаточно много места, но в самой статье не сказано, что же входит в эту область памяти и сам я найти не смог, поэтому и прошу помощи здесь.
  • Вопрос задан
  • 731 просмотр
Пригласить эксперта
Ответы на вопрос 3
@cthulhudx
Попробуйте вычислить причину утечки памяти с помощью стандартной утилиты jhat.
Java Heap Analysis Tool
Ответ написан
Комментировать
@j_wayne
Или же VisualVM. Тоже стандартная
Ответ написан
Foror
@Foror
Графоман
Какая версия JVM? Попробуйте другой коллектор, например -XX:+UseG1GC
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы