Как сохранить тайник гражданина второго сорта - PullRequest
0 голосов
/ 10 ноября 2011

ОК в комментарии к этому вопросу:

Как очистить кеши, используемые ядром Linux

ypnos утверждает, что:

«Приложения всегда будут первыми гражданами памяти и им не придется бороться с кешем».

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

http://www.linuxatemyram.com/play.html

шаг 1:

$ free -m
total used free shared buffers cached
Mem: 3015 2901 113 0 15 2282
-/+ buffers/cache: 603 2411
Swap: 2406 2406 0

Таким образом, 2282MB используется кэшем, а 113MB свободным.

Сейчас:

$ ./munch
Allocated 1 MB
Allocated 2 MB
Allocated 3 MB
Allocated 4 MB
.
.
.
Allocated 265 MB
Allocated 266 MB
Allocated 267 MB
Allocated 268 MB
Allocated 269 MB
Killed

ОК, Linux дал мне, щедро, еще 156 МБ и все! Итак, как я могу сказать Linux, что мои программы важнее, чем этот кэш 2282 МБ?

Дополнительная информация: my / home зашифрован.

Больше людей с такой же проблемой (Это делает гипотезу шифрования не очень правдоподобной):

https://serverfault.com/questions/171164/can-you-set-a-minimum-linux-disk-buffer-size

и

https://askubuntu.com/questions/41778/computer-freezing-on-almost-full-ram-possibly-disk-cache-problem

Ответы [ 3 ]

1 голос
/ 10 ноября 2011

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

Это ядро ​​готовится к удаче в случае повторного запроса в кеше. Если память больше никому не нужна, ее освобождение мало что дает.

0 голосов
/ 11 ноября 2011

Я узнал, выключу ли я своп

#swapoff -a

Проблема уходит. Если у меня есть своп, когда я запрашиваю больше памяти, то linux пытается переместить кеш в своп, а затем своп заполняется, тогда linux останавливает всю операцию, а не сбрасывает кеш. Это приводит к «нехватке памяти». Но без свопа Linux знает, что у него нет надежды, кроме как сначала сбросить кеш.

Я думаю, что это ошибка в ядре Linux.

Из той ссылки, которая добавлена ​​в вопрос, можно предположить, что:

sysctl -w vm.min_free_kbytes = 65536

помогает, для меня с 64MG я могу легко попасть в неприятности. Я работаю с запасом в 128 МГ, и когда жадный кэш достигает этого уровня, машина становится очень медленной, но в отличие от того, что не зависает. Я проверю с полем 256MG и посмотрю, будет ли улучшение или нет.

0 голосов
/ 10 ноября 2011

Я не уверен насчет конкретных вещей для Linux, но хорошая ОС будет отслеживать, сколько раз была обращена страница памяти и как давно. Если к нему не обращались в последнее время, он может его поменять и использовать оперативную память для кэширования. Кроме того, выделенная, но неиспользуемая память также может быть отправлена ​​для подкачки, потому что иногда программы выделяют больше, чем им действительно нужно, поэтому многие страницы памяти просто сидят там, заполняя вашу оперативную память.

...