LINUX.ORG.RU

Большая часть памяти занята кешами, работает oom_killer, drop_caches не дает эффекта

 , linuxatemyram, ,


1

7

Заметил, что пока я был на работе, oom_killer прикончил Firefox на фоне общей нехватки памяти. Картина примерно следующая:

# free -m
             total       used       free     shared    buffers     cached
Mem:         15891      15711        179          0          3      13136
-/+ buffers/cache:       2571      13320
Swap:            0          0          0
Остановил приложения с активным I/O, сделал sync && echo 3 > /proc/sys/vm/drop_caches, кеши почти не уменьшились, тормоза UI заметны на глаз. Вопрос, в общем-то, очевиден: кто виноват и что делать?

Возможно, эти данные чем-то помогут:

★★★

Ответ на: комментарий от tailgunner

Тебе не кажется, что если кто-то внезапно отожрал 16 ГБ рамы, то стоит разобраться, кто это был и почему он себя так повел? А добавление свопа - это симптоматическое лечение, которое, скорее всего, не будет работать.

ddos3
()
Ответ на: комментарий от tailgunner

Своп был. Тогда вместо тормозов от нехватки памяти были тормоза из-за активного перемещения кеша в своп и обратно

si0 ★★★
() автор топика

на фоне общей нехватки памяти. Картина примерно следующая:

Не вижу нехватки памяти.

free -m
             total       used       free     shared    buffers     cached
Mem:          3892       3775        117          2        601       2621
-/+ buffers/cache:        552       3339
Swap:         5844          0       5844

как и в этом случае

roman77 ★★★★★
()
Последнее исправление: roman77 (всего исправлений: 1)
Ответ на: комментарий от ddos3

Тебе не кажется, что если кто-то внезапно отожрал 16 ГБ рамы, то стоит разобраться, кто это был и почему он себя так повел?

Мне кажется, что в логах есть вот это:

[1797823.696096] Node 0 Normal free:52584kB

И если в таких условиях при fork невозможно выделить 8КБайт, дело, скорее всего, в фрагментации. Использование свопа - способ ее обойти.

А разобраться, конечно, стоит. Только вряд ли мы сумеем это сделать.

tailgunner ★★★★★
()
Ответ на: комментарий от si0

Своп был. Тогда вместо тормозов от нехватки памяти были тормоза из-за активного перемещения кеша в своп и обратно

(пожимая плечами) Выбирай, что для тебя лучше: OOM или свопинг.

tailgunner ★★★★★
()

большая часть памяти занята кешами
перемещения кеша в своп и обратно

Про то, что такое кеши, читаем здесь: http://www.linuxatemyram.com/ (кратко: Линукс хранит кеши ФС в свободной памяти, при необходимости выделить память, кеши выбрасываются; в своп кеши не пишутся; у тебя доступно для программ еще 13 ГБ из 16).

Причин для запуска oom_killer я не вижу, рамы у тебя очень много. Возможно, имел место принудительный запуск (что маловероятно, но все же). Проверь, что это за скрипт covertart.sh, во время работы которого произошел oom_killer.

Посмотри, кто у тебя активнее всех потребляет CPU (top) и диск (iotop).

ddos3
()
Ответ на: комментарий от tailgunner

невозможно выделить 8КБайт

Откуда ты знаешь, что был запрос на выделение 8КБ? Подскажи, где это написано.

дело, скорее всего, в фрагментации.

Фрагментации чего?

ddos3
()
Ответ на: комментарий от roman77

Я не знаю, зачем ядро это делает. Возможно, оно вместо того, чтобы вытеснить кеши из памяти и занять ее чем-нибудь полезным, вытесняло полезные данные на диск, а кеши не трогало. Но тормоза были, своп активно использовался до момента заполнения, а потом включался тот же oom_killer. Никакое приложение в момент его работы не ело память, более 10ГБ было всегда занято кешами.

si0 ★★★
() автор топика
Ответ на: комментарий от ddos3

Про то, что такое кеши, читаем здесь: http://www.linuxatemyram.com/ (кратко: Линукс хранит кеши ФС в свободной памяти, при необходимости выделить память, кеши выбрасываются; в своп кеши не пишутся; у тебя доступно для программ еще 13 ГБ из 16).

Гладко было на бумаге... Недоступны для программ эти 13ГБ и даже через drop_caches не освобождаются, в этом вся суть треда

А скрипт coverart.sh безобидный, там нечему память есть - ему просто не повезло :)

si0 ★★★
() автор топика
Ответ на: комментарий от tailgunner

(пожимая плечами) Выбирай, что для тебя лучше: OOM или свопинг.

Мне не нужен ни oom, ни своппинг - у меня 13ГБ свободной памяти - я хочу, чтобы она была доступна приложениям, а не лежала мертвым грузкешем

si0 ★★★
() автор топика
Ответ на: комментарий от si0

А проверь, на всякий случай, нет ли у тебя какого-нибудь ramfs, забитого под завязку. Вроде /tmp и тому подобных. Что говорят cat /proc/mounts и df -h?

ddos3
()
Ответ на: комментарий от ddos3

Несколько примонтированных tmpfs есть, но там было суммарно мегабайт 50 - я сразу проверил :)

Как трактовать строку «Shmem: 13075100 kB» в /proc/meminfo?

si0 ★★★
() автор топика
Ответ на: комментарий от ddos3

Откуда ты знаешь, что был запрос на выделение 8КБ?

[1797823.695987] coverart.sh invoked oom-killer: gfp_mask=0x3000d0, order=1, oom_score_adj=0

оrder=1 - это 2 страницы, 8К.

tailgunner ★★★★★
()
Ответ на: комментарий от si0

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

Покрути swappiness. Но своп тебе всё равно нужен, чтобы обойти фрагментацию.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Крутил swappiness, она дает только отсрочку oom_killer-a. При активном случайном чтении 2ТБ данных дисковые кеши неуклонно растут - надо их как-то перевоспитать, чтобы они своевременно освобождали оперативку, когда та нужна приложениям, иначе никакого свопа не напасешься.

si0 ★★★
() автор топика
Ответ на: комментарий от si0

Крутил swappiness, она дает только отсрочку oom_killer-a

Ты крутил swappiness без свопа, или у тебя даже со свопом срабатывает OOM killer?

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от si0

Как я понимаю, кто-то выжирает shared memory (в выводе free это же значение показывается в колонке «shared», но в том, что ты постил выше, там был 0). Перепроверь показания free и посмотри, какой процесс у тебя использует так много shared memory.

ddos3
()
Ответ на: комментарий от tailgunner

Даже со свопом. Только ждать приходится дольше и мучительнее - пока своп заполнится под завязку, все дико тормозит, но если набраться терпения, можно дождаться oom_killer

si0 ★★★
() автор топика
Ответ на: комментарий от ddos3

Цитата из man free: «The shared memory column should be ignored; it is obsolete.» Так что надо смотреть только на meminfo:

[sio@hugetower] /home/sio/
# grep Shmem /proc/meminfo
Shmem:          13080504 kB


[sio@hugetower] /home/sio/
# ipcs -m      

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 1474560    sio        600        393216     2          dest         
0x00000000 3244033    sio        600        393216     2          dest         
0x00000000 3276802    sio        600        393216     2          dest         
0x00000000 3309571    sio        600        393216     2          dest         
0x00000000 3342340    sio        600        393216     2          dest         
0x00000000 3375109    sio        600        393216     2          dest         
0x00000000 915341318  sio        600        393216     2          dest  
Вручную просмотрел каждую запись - мелочевка всякая, родители - обычные десктопные приложения (sonata, gajim, xchat). Даже размер суммарно всего ничего: 393KB*7

tmpfs, повторюсь, есть, но пустые

si0 ★★★
() автор топика
Ответ на: комментарий от ddos3

А если 16 гиг рамы за некоторое время заполняются, то вывод не очевиден?

Нет. И посмотри уже на dmesg - там доходчиво.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

посмотри уже на dmesg - там доходчиво.

посмотрел очень внимательно, увидел вот это: «shmem:3291517» (==13 ГБ). О том же рассказывает /proc/meminfo.

А теперь скажи мне, убогому, где искать эти 13 ГБ, и при помощи какой магии включение свопа решит проблему, а не просто оттянет ее до тех пор, пока своп не забьется?

ddos3
()
Ответ на: комментарий от si0

Еще одна сумасшедшая идея: прогони sudo lsof на tmpfs. Твои симптомы воспроизводятся с удаленными, но все еще открытыми, файлами. Может какой процесс чего открыл, удалил, да забыл закрыть?

ddos3
()
Ответ на: комментарий от ddos3

Прогнал, среди открытых только существующие файлы.

si0 ★★★
() автор топика
Ответ на: комментарий от ddos3

посмотрел очень внимательно, увидел вот это: «shmem:3291517» (==13 ГБ)

Про shmem уже сказали выше.

А теперь скажи мне, убогому, где искать эти 13 ГБ

Окей, но это последний раз. Вот искомые 13ГБ.:

[1797823.696127] 3291810 total pagecache pages

и при помощи какой магии включение свопа решит проблему

Если проблема связана с фрагментацией, то свопинг может ее уменьшить.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Ок, кеш большой из-за активного чтения с диска. Почему он своевременно не освобождается, когда память нужна приложениям?

si0 ★★★
() автор топика
Ответ на: комментарий от ubuntuawp

tmpfs не заполнена. Проблема наблюдается на всех ядрах, прошедших бэкпорты дебиана за последние полгода

si0 ★★★
() автор топика
Ответ на: комментарий от tailgunner

Вот искомые 13ГБ
невозможность выделить 8К
проблема связана с фрагментацией

1) Фрагментация чего? Дай ссылку, где про это почитать.
2) Есть какие-то веские основания полагать, что проблема именно в этом? Занято всего порядка 20% памяти. Это должна быть какая-то очень адовая фрагменатция, чтобы в остальных 80% не нашелся цельный блок из двух страниц.

ddos3
()
Ответ на: комментарий от si0

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

То, что он «своевременно не освобождается», ты заключил из OOM?

tailgunner ★★★★★
()

+1 Проблема в больших файлах в tmpfs.

Я переписывал 1Гб файл с флэшки в tmpfs, кэш возрос, а в tmpfs показывало что, файл занимает несколько Мб. Я сначала думал, что файл не прочитался, но когда записал на жесткий диск, размер оказался нормальным.

Shmem как раз говорит об этом.

Параметры tmpfs крутить тут.

/etc/default/tmpfs

anonymous
()
Ответ на: комментарий от tailgunner

Фрагментация, как я

О какой такой фрагментации ты все время говоришь? Дай уже наконец ссылку, где можно об этом почитать. И какие у тебя есть основания предполагать фрагментацию при 80% свободной памяти?

заполнение tmpfs

Проверили же уже, ничего не нашли.

ошибка ядра

ТС пробовал разные версии ядра. Если ошибка давняя и легко воспроизводится, то почему ее еще не починили? А если ошибка проявляется только в определенных условиях, хочется понять, в каких именно.

ddos3
()

Мне все еще на дает покоя идея про tmpfs. Попробуй их отмонтировать по одной (в single user mode, если потребуется). Может внезапно обнаружится, что одна из них все-таки держала всю память? А если нет, то по крайней мере, можно будет окончательно снять подозрения с tmpfs/ramfs и начать копать в другом направлении.

ddos3
()
Ответ на: комментарий от ddos3

заполнение tmpfs

Проверили же уже, ничего не нашли.

Пусть скажет как проверял.

anonymous
()
Ответ на: комментарий от ddos3

Свои tmpfs (за исключением стандартных от дистрибутива) я так и проверял.

Сегодня утром почти случайно удалось освободить эти 13ГБ shmem без перезагрузки: когда, убив по одному все сколько-нибудь активные приложения (после каждого делая sync и drop_caches), я сдался и собрался было перезагрузиться, я вышел из иксов и наудачу сделал те же sync + drop_caches. Счетчик shmem обнулился.

Последним шагом были остановлены X, fluxbox, conky (3 инстанции), xxkb, urxvtd, xscreensaver и два маленьких самописных скрипта. Сейчас иксы запущены снова, буду ждать накопления мусора в shmem и убивать этих по одному. Наибольшие подозрения у меня вызывает xscreensaver (он 18 часов в сутки крутит слайдшоу из фотографий), следующий на очереди urxvtd.

Как только узнаю что-то новое - отпишусь здесь.

si0 ★★★
() автор топика

И никто не вспомнил про zram...

anonymous
()
Ответ на: комментарий от ZuBB

Проблема воспроизводится при обычном использовании, но медленно - через две недели обычно на глаз ничего еще не заметно - а там, глядишь, и новое ядро выпускают :)

Urxvtd был запущен те же 20 дней, что и компьютер.

si0 ★★★
() автор топика

У меня тоже на дебиане оно течет, при любой попытке обращения к миллионам мелких файлов в ext4. Пытался бороться, потом забил.

xtraeft ★★☆☆
()
Ответ на: комментарий от xtraeft

У меня тоже на дебиане оно течет, при любой попытке обращения к миллионам мелких файлов в ext4

Еще один специалист по системному программированию...

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.