5

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

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

Я не смог найти способ зарезервировать память для буферов и кешей, поэтому начал искать альтернативные способы и нашел cgroups.

В cgroups вы не можете установить ограничение памяти для корневых ресурсов, поэтому я попытался переместить все процессы в группу с ограниченной памятью, но почему-то это не сработало.

Пожалуйста, помогите, как я могу зарезервировать память для буферов и кешей и начать замену на compcache на ранней стадии.

4 ответа4

4

Если вы хотите зарезервировать память для кеша и буфера: echo 10> /proc /sys /vm /vfs_cache_pressure, когда 100 является значением по умолчанию. Затем вы можете ограничить максимальную оперативную память, используемую каждым приложением: echo 8192> /proc /sys /vm /max_map_count. Я рекомендую swapiness = 30 и высокие значения /proc /sys /vm /dirty_writeback_centisecs и /proc /sys /vm /dirty_expire_centisecs (оба: 1250). Это также может помочь настроить файловую систему:

echo 8192 > /sys/block/mmcblk0/queue/max_sectors_kb
echo 8192 > /sys/block/mmcblk1/queue/max_sectors_kb
echo 0 > /sys/block/mmcblk0/queue/iosched/slice_idle
echo 0 > /sys/block/mmcblk1/queue/iosched/slice_idle
echo 160 > /sys/block/mmcblk0/queue/iosched/quantum
echo 160 > /sys/block/mmcblk1/queue/iosched/quantum
echo 800 > /sys/block/mmcblk0/queue/iosched/fifo_expire_sync
echo 800 > /sys/block/mmcblk1/queue/iosched/fifo_expire_sync
echo 180 > /sys/block/mmcblk0/queue/iosched/fifo_expire_async
echo 180 > /sys/block/mmcblk1/queue/iosched/fifo_expire_async
echo 1 > /sys/block/mmcblk0/queue/iosched/back_seek_penalty 
echo 1 > /sys/block/mmcblk1/queue/iosched/back_seek_penalty

Эти значения взяты с моего мобильного телефона и моего ноутбука, и он работает очень стабильно и делает все довольно быстро. Мой мобильный ограничен в памяти, но этот твик очень помогает. На моем мобильном также включены cgroups, и я бы порекомендовал 4k wonderpatch, потому что он добавляет пользовательские cgroups к каждому приложению, запущенному пользователем с терминала (не с рабочего стола), но я не знаю, как ограничить память с помощью cgroups.

1

Вы не можете напрямую зарезервировать память для буферов и кеша. Ядро будет использовать память, которая не используется ни для чего другого, иногда заменяя очень старые неиспользуемые страницы, чтобы освободить место, поэтому способ восстановления памяти для кешей / буферов состоит в ограничении объема приложений ОЗУ (включая вашу виртуальную память). машины) используют.

Одной из распространенных проблем является выделение памяти для виртуальных машин большего количества памяти, чем необходимо, чтобы в ОС на виртуальной машине было место для дискового кэша. Вы можете избавиться от необходимости делать это, включив поддержку кэширования для ваших виртуальных дисков (как это сделать, зависит от вашего решения по виртуализации, о котором вы не заявляете), позволяя хосту решать, сколько памяти в глобальном масштабе используется для кэширования. Таким образом, вы можете уменьшить объем памяти, выделяемой каждой виртуальной машине, с меньшим снижением производительности ввода-вывода, чем в противном случае. Слово предостережения: делая это, вы открываете себя для дополнительной опасности повреждения файловой системы на виртуальных дисках, если на вашем хост-компьютере происходит нечистое завершение работы (например, вызванное отключением питания).

1

Если у вас ограниченная память, не пытайтесь диктовать использование памяти ядру. Ядро, вероятно, уже делает лучшую работу, чем вы можете сделать с cgroups или compcache.

Единственное реальное решение, если увеличение памяти не является вариантом, это ограничить использование оперативной памяти. Увеличение пространства подкачки может "решить" проблему, но вызвать длительный обмен между процессами. Уменьшение использования оперативной памяти виртуальной машиной может улучшить ситуацию.

См. Статью « Уменьшите объем памяти Linux». Хотя с 2007 года это все же может помочь.

Вы также можете скомпилировать свое собственное ядро, отключив все службы и опции, которые вам не нужны. Смотрите, например, эту статью: Руководство по настройке размера ядра.

Вместо этого вы можете перейти на версию Linux с небольшим объемом памяти, как в этой статье: 8 лучших крошечных дистрибутивов Linux.

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

0

Перейдите в терминал, затем перейдите в корневой режим, затем выполните: nano /etc/sysctl.conf и в нижней части скопируйте это.

vm.swappiness = 60

vm.overcommit_ratio = 100

vm.min_free_kbytes = 1000000

Это текущая конфигурация, которую я использую, 2 нижние строки равняются 1 ГБ, так как я ограничен 10 ГБ моего 12 ГБ оперативной памяти, поэтому он резервирует для меня 10% и корректирует его, как и должно быть.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .