Как увидеть использование памяти буферами NIO? - PullRequest
1 голос
/ 22 апреля 2010

Есть ли способ увидеть использование памяти буферами NIO? В JConsole есть раздел памяти без кучи, но я не думаю, что это включает буферы NIO?

Операционная система - Linux (Ubuntu или CentOS), если это имеет значение.

С уважением,

Wim

Ответы [ 3 ]

3 голосов
/ 25 апреля 2010

Стоит отметить, что прямые буферы памяти используют только столько физической памяти, сколько вы используете (до следующего размера страницы, обычно 4 КБ).При создании они используют виртуальную память, но ОС достаточно умна, чтобы не выделять страницы физической памяти (резидентной), пока вы не используете страницы в прямом буфере памяти.Это означает, что размер используемой физической памяти может быть меньше объема выделенной памяти (виртуальной).Вам следует позаботиться о физической / резидентной памяти.

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

1 голос
/ 24 апреля 2010

Да, из Linux через команду ps. Пример:

ps x -o command,rss | grep java | grep latest | cut -b 17-

Вывод будет в КБ.

Вам может быть интересен вопрос, который у меня был недавно относительно буферов Java, RSS и NIO: Почему Sun JVM продолжает потреблять все больше памяти RSS, даже когда размеры кучи и т. Д. Стабильны

0 голосов
/ 25 апреля 2010

Я использовал это для мониторинга виртуальной и RSS-памяти и количества собственных потоков:

for((i=0;;++i)) { echo $i ` grep VmSize /proc/\21009/status | grep -o '[0-9]*'` ` grep VmRSS /proc/\21009/status | grep -o '[0-9]*'` ` grep Threads /proc/\21009/status | grep -o '[0-9]*'` ; sleep 1 || break; } > data

Создает разделенный пробелами файл, который вы можете легко импортировать в ваш любимый инструмент для работы с электронными таблицами.

Вам необходимо заменить 21009 идентификатором процесса Java-процесса, который вы, конечно, хотите отслеживать.

Это не полностью отвечает на мой собственный вопрос, так как я хотел иметь возможность взглянуть только на то, что выделил материал NIO, а не на всю память, используемую JVM, хотя этот небольшой скрипт уже доказал, что я достаточно полезен, чтобы увидеть, что в исследуемой мной программе нет утечек памяти.

...