Назад | Перейти на главную страницу

Анализ управления памятью

Я делаю анализ управления памятью для своего веб-приложения Java,

Перед запуском моего кота свободная память составляла около 595 МБ. После запуска сервера объем свободной памяти достигал 151 МБ. Когда я делал дамп кучи, объекты занимали 262 МБ.

Так займет ли только Tomcat оставшиеся 181 МБ?

Другой вопрос: я провел нагрузочный тест с 500 пользователями. Свободная память составляет 8 МБ. Когда я делал здесь дамп кучи, было около 265 МБ. Итак, свободное место с 151 МБ уменьшилось до 8 МБ, в чем может быть причина

Во-первых, прочтите и поймите http://www.linuxatemyram.com/ почему количество "свободной" памяти намного ниже, чем вы думаете.

Во-вторых, Java выделяет всю свою кучу заранее из операционной системы, хотя она не касается страниц и не загрязняет их до тех пор, пока они не будут фактически использованы. Это дает вам лучший результат, например:

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND         
9521 pjc       17   0 1288m 524m  25m S  0.0 13.3  58:31.92 java

Это я запускаю Eclipse; столбец VIRT показывает, что Java, вероятно, имеет максимальный размер кучи 1024 МБ; Кроме того, есть библиотеки и память, выделенная для хранения скомпилированной Java. Однако в настоящее время в оперативной памяти находится только 524 МБ.

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

Использовать пси-зонд чтобы увидеть, что происходит в JVM. Или VisualVM, но пси-зонд доступнее.

Операционная система шустрая, а не тупая. Он понимает, что свободная память - это потраченная впустую память, не лучше, чем память, которой вообще нет в системе. Это не похоже на то, что если ваш компьютер с 4 ГБ сегодня использует только 3 ГБ, вы можете использовать 5 ГБ завтра.

Таким образом, он хранит то, что может быть использовано в оперативной памяти. Если позже он сможет использовать это, это победа в производительности. Удивительно, но если позже он не сможет его использовать, он по-прежнему выигрыш в производительности, потому что, если бы он сделал его бесплатным, ему просто пришлось бы снова использовать его. (Для этого потребуется две операции, тогда как переключение напрямую с одного использования на другое - всего одна операция.)

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