У меня есть 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), продолжает расти?
запустите команду 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
См. Http://stackoverflow.com/questions/26041117/growing-resident-memory-usage-rss-of-java-process –