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

выделение памяти Java под Linux

Я запускаю 4 процесса Java с помощью следующей команды:

java -Xmx256m -jar ...

и система имеет 8 ГБ памяти под Fedora 12.

однако он, по-видимому, будет заменен.

как такое может быть, если 4 x 256 м = 1 Гб?

РЕДАКТИРОВАТЬ: кроме того, как можно использовать все 8 ГБ памяти с таким маленьким объемом памяти, выделенным в основном единственному работающему устройству?

это java, а не сборщик мусора, потому что ОС говорит, что это не нужно или что?


ВЕРХНЯЯ:

top - 20:13:57 up  3:55,  6 users,  load average: 1.99, 2.54, 2.67
Tasks: 251 total,   6 running, 245 sleeping,   0 stopped,   0 zombie
Cpu(s): 50.1%us,  2.9%sy,  0.0%ni, 45.1%id,  1.1%wa,  0.0%hi,  0.8%si,  0.0%st
Mem:   8252304k total,  8195552k used,    56752k free,    34356k buffers
Swap: 10354680k total,    74044k used, 10280636k free,  6624148k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1948 xxxxxxxx  20   0 1624m 240m 4020 S 96.8  3.0 164:33.75 java
 1927 xxxxxxxx  20   0  139m  31m  27m R 91.8  0.4  38:34.55 postgres
 1929 xxxxxxxx  20   0 1624m 200m 3984 S 86.2  2.5 183:24.88 java
 1969 xxxxxxxx  20   0 1624m 292m 3984 S 65.6  3.6 154:06.76 java
 1987 xxxxxxxx  20   0  137m  29m  27m R 28.5  0.4  75:49.82 postgres
 1581 root      20   0  159m  18m 4712 S 22.5  0.2  52:42.54 Xorg
 2411 xxxxxxxx  20   0  309m 9748 4544 S 20.9  0.1  45:05.08 gnome-system-mo
 1947 xxxxxxxx  20   0  137m  28m  27m S 13.3  0.4  44:46.04 postgres
 1772 xxxxxxxx  20   0  135m  25m  25m S  4.0  0.3   1:09.14 postgres
 1966 xxxxxxxx  20   0  137m  29m  27m S  3.0  0.4  64:27.09 postgres
 1773 xxxxxxxx  20   0  135m  732  624 S  1.0  0.0   0:24.86 postgres
 2464 xxxxxxxx  20   0 15028 1156  744 R  0.7  0.0   0:49.14 top
  344 root      15  -5     0    0    0 S  0.3  0.0   0:02.26 kdmflush
    1 root      20   0  4124  620  524 S  0.0  0.0   0:00.88 init
    2 root      15  -5     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
    4 root      15  -5     0    0    0 S  0.0  0.0   0:00.04 ksoftirqd/0

Общее потребление памяти в вашей системе выглядит нормально. Не забудьте вычесть «кэш» и «буфер» из «использованной» части, чтобы получить точный объем свободной памяти. Кэш-память используется для кэширования файлов в оперативной памяти в случае будущего доступа. Если Linux требуется больше памяти, он просто уменьшит этот объем памяти, поэтому вы обычно не учитываете его использование при определении использования памяти. Поскольку в пуле кэш-памяти 6 ГБ, при необходимости доступно много оперативной памяти.

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

Диспетчер памяти автоматически помещает данные в своп, даже если физическая память не заполнена, исходя из того, что он считает лучшим. Есть ли причина, по которой вы вообще не хотите, чтобы он переходил в своп? Действительно ли это влияет на работу программы?

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

Кроме того, когда используется своп? Постоянно или после того, как немного поработал? Вы также должны принять во внимание, что базовой системе также нужна память. И любые IDE, которые вы используете, и любые другие запущенные программы. Так что вам может понадобиться своп больше, чем вы думаете.

как можно использовать все 8 ГБ памяти с таким маленьким объемом памяти, выделенным в основном единственному работающему устройству?

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

Хотя это может показаться неопрятным способом работы, это быстрее. Операционная система может эффективно использовать эту память, как только ее можно будет лучше использовать.

Вы использовали только 70 МБ свопа.

Диспетчер памяти ОС может разместить вещи там, где он считает нужным. Если вы хотите, чтобы он не использовал пространство подкачки, вам нужно отключить его.

Видеть http://linux.about.com/library/cmd/blcmdl8_swapoff.htm для информации о swapoff.