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 и подобным ручкам.

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

Ответить