1

Я совершенно новичок в Linux и просто пытаюсь понять, куда уходит вся моя оперативная память. У меня довольно свежая установка Xubuntu в качестве гостя VMWare, и я выделил ей 1,5 ГБ ОЗУ для игры.

После запуска только двух приложений, запускающих серверы Tomcat, а также запуска Firefox, у меня почти ничего не осталось. 160 МБ в соответствии со свободным-м.

Глядя на выходные данные Top, я вижу, что Java появляется дважды, каждый крадет около 1/2 Gig резидентной памяти. Оба экземпляра Tomcat используют один и тот же jdk, я бы подумал, что только один раз смогу увидеть там Java

В чем дело?

Обновить

Требуется свободный вывод -m:

             total     used     free    shared    buffers    cached
Mem:          1419     1380       39         0          8       111
-/+ buffers/cache:     1259      160       
Swap:          509       68      441

Верхний:

    VIRT   RES   SHR   %MEM   COMMAND
   74764   36m  6032    2.6   Xorg
    750m  500m  3436   35.5   java
    881m  408m   10m   28.8   java
    6128  1876  1588    0.1   vmtoolsd
   26156  3408  2672    0.2   vmware-user-load
    409m  104m   15m    7.4   firefox-bin
    2632  1060   776    0.1   top
    3032  1264   812    0.1   init
    All zeroes after here.

1 ответ1

4

Это не проблема Linux, это проблема Java (и совершенно нормальное поведение). То же самое произойдет и в Windows, хотя я думаю, что может быть более стремительным выгрузить часть этих процессов Tomcat.

Прежде всего, два экземпляра Tomcat собираются запустить два экземпляра JVM в двух отдельных процессах. Вопрос в том, нужны ли вам два экземпляра Tomcat. Вы можете легко запустить два разных веб-приложения в одном экземпляре.

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

Если вы уверены, что вашим веб-приложениям требуется намного меньше половины гигабайта памяти, вы можете запустить Tomcat с меньшей максимальной кучей, установив для переменной среды CATALINA_OPTS значение «-Xmx256m» в catalina.sh, чтобы получить максимальную кучу 256 МБ. Если вашему приложению иногда требуется больше памяти, но вы хотите, чтобы оно быстрее сокращало кучу, установите для него значение «-XX:MaxHeapFreeRatio = 20 -XX:MinHeapFreeRatio = 10» - это вернет память операционной системе, если более 20% кучи освобождается после сборки мусора и расширяет кучу, если свободно менее 10%. Но это может снизить производительность, заставляя Java тратить много времени на выделение памяти из ОС и вскоре после этого освобождение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .