2 декабря 2015 г., 17:33 пользователь Hleb Valoshka <[email protected]> написал:
> On 12/2/15, Aleksandr Sytar <[email protected]> wrote: > >> А вот сегодня мне пришлось вручную сбрасывать кэш, занимавший около > >> 60% всего объёма ОЗУ, пока этого не сделал, была загрузка процессора > >> ядром под 90% и в логи валились сообщения типа "[6848409.216723] java: > >> page allocation failure. order:1, mode:0x20 > >> [6848409.216929] Pid: 17814, comm: java". > >> > >> Там ещё прозрачные huge pages включены, но это, думаю, не столь важно. > >> > >> Вопрос, почему ядро не сбрасывает кэш? > >> > > > > Все несколько сложнее чем кажется на первый взгляд, но сообщения о > нехватке > > памяти может быть получено когда память есть, но не та которая нужна > > приложению - в данном случае java попросила 1 страницу 8к, и их не > > Это вы к примеру сказали, или из сообщения определили (order:1, mode:0x20)? > (2^order)*page_size - количество нехвативших страниц > > оказалось, а вот страниц 4к, 16к и т.д. вполне могло быть в достатке. > > И при этом 250 ГБ заняты под кэш, почему бы не почистить его? > Почистить можно то что свободно, то что занято можно выдавить в свап, но не сразу, а только через dirty_background_ratio и подобным ручкам. Но при этом нужно понимать - если система будет перекладывать страницы в свап, она будет дольше из него доставать (поищи страницы в памяти, получи ошибку, что она в свапе, загрузи в память, отдай приложению), что скажется на скорости работы. Поэтому разумнее ограничить аппетиты нового приложения с учетом текущих реалий по кешу.

