Утечка пямяти в Линукс

Papazyan

Каким-то образом вся память на машине оказалась сожранной. Исследование всяких системных сообщений в /proc показало, что единственный кандидат - это Slab (пользовательские процессы, если судить по ps, не виновны):
cat /proc/meminfo
MemTotal: 66013012 kB
MemFree: 9470408 kB
Buffers: 317304 kB
Cached: 1086040 kB
SwapCached: 44080 kB
Active: 944396 kB
Inactive: 558576 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 66013012 kB
LowFree: 9470408 kB
SwapTotal: 68157424 kB
SwapFree: 67991776 kB
Dirty: 976 kB
Writeback: 0 kB
AnonPages: 60704 kB
Mapped: 9572 kB
Slab: 54946420 kB
CommitLimit: 101163928 kB
Committed_AS: 739192 kB
PageTables: 7240 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 318532 kB
VmallocChunk: 34359419791 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
Hugepagesize: 2048 kB
Но в slabinfo нет абсолютно никаких кешей, размер которых превышал бы 100 мегабайт. Как так может быть, что поле Slab в meminfo на порядок больше, чем сумма всех его кешей с запасом?

dgaf

Зачем ядро такое старое?

Papazyan

2.6.16. Это не от меня зависит, его инсталлируют хуй знает кто, где-то за границей.

sergeikozyr

что вообще за устройство?
у меня как-то была проблема, когда из-за выделения слишком маленького буфера под память интегрированной видеокарты (gf 6300, кажется текла память (проприетарные драйвера нвидии). После выделения большего объёма течь перестало.

juliuzz

Зачем ядро такое старое?
зачем используешь "зачем" вместо "почему"?

dgaf

3 года назад был коммит, который разделяет показания slab в meminfo на те, которые можно освободить и нельзя.
grep Slab -A2 /proc/meminfo
Slab: 186572 kB
SReclaimable: 165300 kB
SUnreclaim: 21272 kB
в данном случае 165Мб освободится по запросу

Papazyan

что вообще за устройство?
Просто сервер, много работает с диском и сетью.

Papazyan

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

Papazyan

Тут проблема в том, что размер слаба в Меминфо и сумма страниц кешей в slabinfo не совпадают. Я проверил на другом сервере - там они очень похожи, а тут 54G против 300М. Как это возможно?

Marinavo_0507

В такой ситуации хуй знает кто из-за границы неминуемо этот сервак ребутнёт, другого выбора у него, пожалуй, нет.

Papazyan

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

Marinavo_0507

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

dgaf

2.6.16 был long time support, поддержка закончилась год назад. без четвёртого числа не сказать сколько там багов

dgaf

>Патч не установить
в нём для тебя и нет особого смысла, он изменяет по виду только формат вывода.

Marinavo_0507

думаешь там четвёртое число, без названия дистрибутива?

dgaf

а хз. мне всё равно =)
если люди с kernel.org предоставляют LTS ядро и дистр поставляет ту же версию, то логичным было бы думать, что оно на основе ванильного. А может там действительно 2.6.16[.0]-superlinux
лишь бы не редхат, в 2.6.9 которого есть кммиты из 2.6.31

vall

это sles10 скорее всего и он от ванильного далеко в сторону ушёл

Marinavo_0507

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

Papazyan

Linux hostname 2.6.16.60-0.31-smp SMP Tue Oct 7 16:16:29 UTC 2008 x86_64 x86_64 x86_64 GNU/Linux
Я засек, что тут что-то неладно с ReiserFS. Поставил прогу записывать данные по кешам и размер Slab из меминфо. Вычислю корреляцию между leakом и колебаниями кешей в размерах, тогда видно будет.

Marinavo_0507

2.6.16.60-0.31-smp
http://forums.novell.com/novell-product-support-forums/suse-...
но там тоже нет ответа
Оставить комментарий
Имя или ник:
Комментарий: