2010-04-22 2 views
1

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

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

С уважением,

Wim

ответ

0

я использовал это, чтобы следить за виртуальной и 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, хотя этот маленький скрипт уже доказал мне, что он достаточно полезен для просмотра что в программе, которую я исследовал, нет утечек памяти.

1

Да, из Linux с помощью команды ps. Пример:

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

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

Вы можете быть заинтересованы в вопросе я имел некоторое время назад о Java, RSS и НИО буферов: Why does the Sun JVM continue to consume ever more RSS memory even when the heap, etc sizes are stable?

+0

Спасибо за ссылку, очень интересно! –

3

Стоит отметить, что в буферах прямой памяти используется столько физической памяти, сколько вы используете (на следующий размер страницы, обычно 4K). Они используют виртуальную память при создании, но ОС достаточно умна, чтобы не выделять страницы физической памяти (резидентной), пока вы не будете использовать страницы в буфере прямой памяти. Это означает, что размер используемой физической памяти может быть меньше объема памяти, которую вы выделяете (виртуальный). Физическая/резидентная память - это то, о чем вы должны заботиться.

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