Всем привет,
Подскажите куда смотреть. Имеется софтинка, которая активно использует ОЗУ, причем пользователи могут туда залить много данных и написать правила обработки этих данных так, что если правила написали неудачно, то софтинка может выжрать всю память.
Ожидается, что если доступная память закончилась, (своп отключен, оом киллер тоже отключен) процесс из аллокатора получит ошибку, что память кончилась и процесс закончит обработку запроса пользователя и освободит выделенную память.
Но процесс запущен в виртуалке в контейнере, хостится девопсами. Происходит следующее - когда память кончается, потоки запрашивающие память переходят в состояние D и мы видим в стеке следующее:
[<ffffffffb244e13d>] mem_cgroup_oom_synchronize+0x16d/0x590
[<ffffffffb23cdad4>] pagefault_out_of_memory+0x14/0x90
[<ffffffffb29aaf88>] mm_fault_error+0x6a/0x15b
[<ffffffffb29bfa61>] __do_page_fault+0x4a1/0x510
[<ffffffffb29bfb05>] do_page_fault+0x35/0x90
[<ffffffffb29bb7b8>] page_fault+0x28/0x30
[<ffffffffffffffff>] 0xffffffffffffffff
Процесс зависает, докер образ становится необслуживаемым и лечится только перезагрузкой. Что мы готовим не так?