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

Недостаточно памяти при использовании 72%

В настоящее время у меня проблема с моим 48-гигабайтным RAM-сервером: он быстро убивает процессы из-за недостатка памяти, даже если он использует только 72% (я получил эту цифру из моего интерфейса мониторинга). (использование свопа: 60%)

Я немного исследовал, но не смог найти, что не так.

В настоящее время я пытаюсь «прочитать» системный журнал, чтобы узнать, действительно ли мое использование памяти было 72%, но не могу найти соответствующую информацию. Кроме того, вы, ребята, видите что-нибудь, что могло бы помочь мне в моем расследовании?

Системный журнал: http://pastebin.com/4DczHYqF

Спасибо

Спасибо

Ответ на ваш вопрос: вы используете больше памяти, чем 72%. Вы можете рассчитать его через отчет OOM.

Бит, который сообщает вам, в каком состоянии была память, - это этот бит:

Aug 11 04:20:14 myserver kernel: Node 0 DMA free:15884kB min:8kB low:8kB high:12kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB isolated(anon):0kB isolated(file):0kB present:15968kB managed:15884kB mlocked:0kB dirty:0kB writeback:0kB mapped:0kB shmem:0kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:0kB unstable:0kB bounce:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? yes
Aug 11 04:20:14 myserver kernel: lowmem_reserve[]: 0 3539 48337 48337
Aug 11 04:20:14 myserver kernel: Node 0 DMA32 free:181176kB min:2060kB low:2572kB high:3088kB active_anon:1334312kB inactive_anon:445152kB active_file:221600kB inactive_file:1327176kB unevictable:0kB isolated(anon):0kB isolated(file):384kB present:3644928kB managed:3624548kB mlocked:0kB dirty:1328084kB writeback:0kB mapped:220kB shmem:7852kB slab_reclaimable:75340kB slab_unreclaimable:34920kB kernel_stack:48kB pagetables:4684kB unstable:0kB bounce:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:2463022 all_unreclaimable? yes
Aug 11 04:20:14 myserver kernel: lowmem_reserve[]: 0 0 44797 44797
Aug 11 04:20:14 myserver kernel: Node 0 Normal free:25892kB min:26072kB low:32588kB high:39108kB active_anon:31943548kB inactive_anon:1879196kB active_file:5038872kB inactive_file:5769308kB unevictable:0kB isolated(anon):0kB isolated(file):4224kB present:46661632kB managed:45873100kB mlocked:0kB dirty:6184880kB writeback:324kB mapped:41268kB shmem:1577696kB slab_reclaimable:442212kB slab_unreclaimable:314476kB kernel_stack:3296kB pagetables:92756kB unstable:0kB bounce:0kB free_cma:0kB writeback_tmp:0kB pages_scanned:17216562 all_unreclaimable? yes

В Linux память делится на зоны которые представляют собой области физической ОЗУ, выделенные (обычно по диапазону адресов) для определенной цели.

DMA предназначен для очень старого оборудования, которое может адресовать только небольшую область в DMA. Эта зона не накапливает много памяти и редко, если когда-либо, используется. DMA32 - это зона, зарезервированная для оборудования, которое может адресовать только 32 бита памяти. Это используется в 64-битных системах для этого конкретного класса оборудования. Обычно покрывают около 4G памяти (хотя может и меньше).

Однако подавляющее большинство памяти выделяется в «нормальную» зону. Почти вся память уходит сюда и обратно. Он используется, когда нет специальных маркеров для выделяемой памяти. Когда становится трудно найти память в этой зоне, ядро ​​обычно начинает использовать память в других зонах, чтобы найти ее (хотя я считаю DMA никогда не трогает).

На основе ваших журналов можно сделать следующий расчет.

 DMA Present + DMA32 Present + Normal Present = Total available memory
 15968kB     + 3644928kB     + 46661632kB     = 50322528kB
-
 DMA Free    + DMA32 Free    + Normal Free    = Total free memory
 15884kB     + 181176kB      + 25892kB        = 222952kB
=
 Total available memory - Total free memory = Total Used Memory
 50322528kB             - 222952kB          = 50099576kB
=
 (Total used memory / Total available memory) * 100 = Total used percent
 50099576kB         / 50322528kB              * 100 = 99.55%

Другие зоны могут фактически быть свободными от памяти, но вы все равно получите OOM, потому что зона, которую вы хотеть не бесплатно.

OOM killer - возможное средство для освобождения памяти, когда min значение больше, чем free стоимость. Если вы проверите свой Normal зона, вы можете видеть, что это так и здесь.

Ваши самые большие потребители памяти mysql и java. Либо перенастройте их, чтобы изменить использование памяти, либо получите для них больше памяти.

Возможно, это не общая память, а память, разрешенная одному пользователю, которая определяется ulimit команда.