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

Slab использует 88 ГБ из доступных 128 ГБ. Что могло вызвать это?

Мы запускаем debian 2.6.26-2-amd64 x86_64 GNU / Linux на сервере с 128 Гб. В последнее время наша доступная память стала довольно низкой. Просмотр файла / proc / meminfo показал, что Slab использовал 88 ГБ, которые, конечно, учитываются в используемой памяти.

  1. Это проблема? Я подозреваю, что при необходимости память будет освобождена, но я не знаю, может ли это иметь нежелательные побочные эффекты.
  2. Зачем Slab столько памяти? Есть ли для этого явная причина?
  3. можем ли мы избежать этого в будущем?
  4. Как мы можем освободить эту память?

заранее спасибо

> cat /proc/meminfo
MemTotal:     132304500 kB
MemFree:      26669388 kB
Buffers:        237504 kB
Cached:       11881136 kB
SwapCached:         48 kB
Active:        5244640 kB
Inactive:     11714308 kB
SwapTotal:     5751228 kB
SwapFree:      5750436 kB
Dirty:              24 kB
Writeback:           0 kB
AnonPages:     4840256 kB
Mapped:         163968 kB
Slab:         88314840 kB
SReclaimable: 88275644 kB
SUnreclaim:      39196 kB
PageTables:      80852 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
WritebackTmp:        0 kB
CommitLimit:  71903476 kB
Committed_AS:  6818332 kB
VmallocTotal: 34359738367 kB
VmallocUsed:    505724 kB
VmallocChunk: 34359231963 kB

Используйте информацию о кэше slab ядра для отображения slabtop:

slabtop

См. Также "vmstat -m":

vmstat  -m

и посмотрите / proc / slabinfo:

cat /proc/slabinfo

Отбросить кеш, чтобы освободить память

sync; echo 3 > /proc/sys/vm/drop_caches

Вы абсолютно уверены, что это актуальная проблема: использованная оперативная память не то же, что и недоступный таран (см. ServerFault вопрос о свободных / буферах / кешах), рефлекс желания, чтобы память была указана как свободная, часто бывает неверным.

Slab - это не одна конкретная вещь, это один из распределителей памяти в ядре, в частности slab позволяет ядру управлять объектами, размер которых не соответствует размеру страницы (как указано в другом месте / proc / slabinfo и slabtop должны дать вам некоторое представление о за что он сейчас держится). Еще немного фона на плите можно найти Вот

Если вы видите SReclaimable под Slab, он считает, что почти вся память, выделенная slab, может быть освобождена, когда / при необходимости. Так что да, при необходимости память будет освобождена. Непредвиденные затраты на восстановление покрывают некоторые отложенные бухгалтерские расходы в циклах ЦП.

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

Если вы хотите управлять поведением vmm, проверьте / proc / sys / vm, в частности, min_slab_ratio может быть интересным. Вы также можете ограничить отдельные блочные кэши через / proc / slabinfo (см. статья ibm developerworks подробнее). Хотя, прежде чем вы начнете включать vmm и slab: выясните, чего вы на самом деле хотите достичь, и сделайте небольшое исследование vmm и того, как его можно настроить в соответствии с вашей рабочей нагрузкой. Вполне возможно испортить вашу систему как незаметно, так и эффектно, поигравшись с ручками настройки vmm.