2013-08-27 6 views
2
  1. У меня есть Java (1.6 U25) процесс, выполняющийся на Linux (CentOS 6.3 x64) с JAVA_OPTS = "- сервер -Xms128M -Xmx256M -Xss256K -XX: PermSize = 32M -XX: MaxPermSize = 32M -XX: MaxDirectMemorySize = 128M -XX: + UseAdaptiveSizePolicy -XX: MaxDirectMemorySize = 128M -XX: + UseParallelGC -XX: + UseParallelOldGC -XX: GCTimeRatio = 39 -XX: + PrintGCDetails -XX: + PrintGCDateStamps -Xloggc: gc.log ", приложение java использовали бережливость 0.8.0 lib;Почему мой Java-процесс использует память (Linux RES), продолжает расти?

  2. запустите команду TOP каждый день, значение RES состояния Java будет расти (от 80 МБ до 1,2 ГБ (после запуска приложения один месяц)), но посмотрите, что размер кучи jvm составляет от 100 до 200 МБ, и см. GC log около 1 ~ 2 раза PSyoungGC в минуту, 1 ~ 2 раза PSOld GC в день, без утечки памяти.

Итак, почему используемый метод java будет продолжать увеличиваться и значительно превышает настройки JVM? Я думаю, что java-процесс действительно использовал mem, равный Xmx256M + MaxPermSize32M + MaxDirectMemorySize128M + JVM self used mem = около 416MB?

отношение информация: Virtual Memory Usage from Java under Linux, too much memory used

+0

См. Http://stackoverflow.com/questions/26041117/growing-resident-memory-usage-rss-of-java-process –

ответ

2

Я предлагаю вам взглянуть на ртар процесса. Это даст вам разбивку использования собственной памяти. Память, которой у вас не так много, -

  • Общее пространство стека, используемое потоками.
  • Размер файлов с отображением памяти
  • Размер разделяемых библиотек.
  • Использование памяти в национальной памяти. например, гнездовые буферы (если у вас достаточно гнезд)

Некоторая комбинация из них использует разницу.

Смежные вопросы