У меня есть виртуальный сервер, и мой провайдер берет с меня плату за использование ресурсов. Я могу установить ограничение на максимальный объем оперативной памяти, но я все равно буду платить за фактически использованную оперативную память, а не за максимум (цена рассчитывается каждые 5 минут на основе фактического использования).
Использование всей оперативной памяти в обычных условиях было бы приемлемым, но политика Linux «неиспользуемая оперативная память — это бесполезная оперативная память» не подходит для такого учета, поскольку в конечном итоге машина будет использовать всю доступную оперативную память, и даже если большая ее часть будет использоваться только в качестве кэша на диске, мне все равно придется за это платить.
Мне нравится устанавливать лимит у провайдера немного выше, чтобы удовлетворить пиковые потребности в оперативной памяти. Могу ли я как-то ограничить объем памяти, который будет использоваться для кэширования и т. д.? Допустим, я резервирую 3 ГБ, а моему приложению + системным службам обычно требуется 1 ГБ, но если есть реальная необходимость, мое приложение может использовать дополнительно 2 ГБ оперативной памяти, но в режиме ожидания я хочу ограничить кэш, чтобы он занимал, например, только 500 МБ свободной оперативной памяти, чтобы мне не приходилось платить за 3 ГБ все время.
решение1
Связанный ответкак-очистить-буферы-и-кэш-в-системе-Linuxпоказывает, как освободить кэши (pagecache, dentries и inodes). Вам придется выполнять эту операцию по освобождению неоднократно, возможно, из cron. Я не знаю, будет ли это работать так, как вам нужно в контейнере OpenVZ, потому что управление памятью OpenVZ кажется сложным (или, возможно, недостаточно хорошо документированным). Я не хочу критиковать OpenVZ; это отличное решение для виртуализации, которое может втиснуть много систем на физический сервер.
Прохладный,linux-ftoolsможет помочь вам увидеть, сколько страниц кэша используется для каждого файла.
Вы также можете поэкспериментировать сподкупностьи установите значение 100 для агрессивного обмена.