3

Я запускаю экземпляр Cassandra на сервере с 16 ГБ ОЗУ. Процесс завершился сбоем после ошибки OutOfMemory.

Теперь, когда я проверяю использование памяти, используется 11 ГБ из 16 ГБ.

             total       used       free     shared    buffers     cached
Mem:         16056      11032       5024          0          4         23
-/+ buffers/cache:      11004       5052
Swap:            0          0          0

Удаление кэшей с помощью echo 1> /proc /sys /vm /drop_caches не помогает.

Это вывод команды top с идентификаторами PID, отсортированными по использованию оперативной памяти:

Я не понимаю, какие процессы пожирают память. Я что-то здесь упускаю?

Как я могу восстановить потерянную память?

Ниже приводится информация о процессоре:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             4
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 44
Stepping:              2
CPU MHz:               2933.437
BogoMIPS:              5866.87
Hypervisor vendor:     VMware
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              15360K
NUMA node0 CPU(s):     0-3

uname -a:Linux ExpressoBDAPp33133 2.6.32-431.29.2.el6.x86_64 #1 SMP Sun Jul 27 15:55:46 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux

2 ответа2

1

Я вижу, что вы работаете внутри VMware:

Hypervisor vendor:     VMware

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

На самом деле, максимальное количество баллов по умолчанию составляет, предположительно, 65% физической памяти гостя. Это вполне соответствует вашим 11 ГБ из 16 ГБ.

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

Обратите внимание, что раздувание является симптомом гораздо более серьезной проблемы: нехватка ресурсов на хосте. Не просто отключайте всплывающее окно, так как это заставит гипервизор начать выгрузку гостевой памяти, полностью убив производительность. Вместо этого вы должны либо установить резервирование памяти для этого гостя (что заставит гипервизор более агрессивно возвращать память от других гостей), и установить некоторую подкачку, чтобы гость мог разумно заменять наименее используемые страницы, когда происходит всплывающее окно, вместо принудительного гипервизора. сделать это случайно.

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

См. Также официальный документ VMware по управлению памятью.

0

Память не теряется и не нуждается в восстановлении. Он используется.

Свободная память тратится впустую. Это не дает никакой пользы. Если вы думаете: «Я хочу освободить эту память сейчас, чтобы ее можно было использовать позже», это смешно. Вы можете использовать память сейчас и использовать ее позже. Фактически, наличие свободной памяти сейчас только усложняет ее использование позже, потому что, если память свободна, она требует усилий для ее использования.

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

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

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

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