На моем сервере установлено проприетарное программное обеспечение, которое включает в себя множество баз данных - postgress, tarantool, Memcached и несколько проприетарных приложений с высокой нагрузкой. Система ubuntu 16.04 4.15.0.76-generic
Также на той же машине у меня установлена виртуальная машина (quemu / kvm), на которой установлено все то же программное обеспечение, но другая версия (это причина, по которой она установлена на виртуальной машине). гостевая система ubuntu 18.04 5.4.0-84-generic
Главное в этом программном обеспечении то, что у меня очень ограниченное количество доступных опций, и, самое главное, у него довольно строгие значения тайм-аута , которые я не могу увеличить. (менее полсекунды).
Итак, проблема в том, что через какое-то время вся свободная память уходит в буфер / кеш, и после этого система начинает использовать swap.
Я пытался установить vm.swappiness = 3 по умолчанию было 60 , это как-то помогло, но система работает не очень стабильно, так что это больше похоже на то, что я продлил ее агонию ) Использование свопа приводит к увеличению таймаутов, что, в свою очередь, приводит к неработающему приложению. По какой-то причине система предпочитает начинать использовать своп, чем очищать cache/buff.
Прочитав еще немного, я обнаружил, что могу вручную очистить cache/buff. Поэтому я попытался использовать / bin / sync && / bin / echo 3> proc / sys / vm / drop_caches Я сделал это в задании crontab, которое выполняется каждые два часа для хост-системы и каждые шесть часов для гостевой системы. Я пробовал это в течение недели, система работает стабильно, я еще не нашел никаких поврежденных файлов. Я пробовал использовать его на хосте и гостевых машинах.
Безопасно ли использовать / bin / sync && / bin / echo 3> proc / sys / vm / drop_caches ? Таким образом, источники говорят, что это может привести к потере данных (в основном из-за некоторого времени между sync && echo 3> proc / sys / vm / drop_caches ).
Как связаны vm.swappiness и vm.vfs_cache_pressure ? Как vm.swappiness работает одинаково для этих версий: Ubuntu 16.04 4.15.0.76-общий Ubuntu 18.04 5.4.0-84-общий
Если установлено vm.swappiness = 0 , означает ли это, что система вообще никогда не будет использовать своп и завершит все процессы, если памяти недостаточно? Я где-то читал, что разработчики ядра Linux изменили поведение vm.swappiness = 0 , начиная с некоторой версии ядра, поэтому, если установлено значение 0, это просто убивает процесс.
Каковы возможные значения для vm.vfs_cache_pressure В некоторых источниках говорится, что это от 0 до 200. В разных источниках говорится, что он определяет количество страниц памяти, которые могут быть выделены для баффа / кеша. Что на самом деле означает vm.vfs_cache_pressure? Какие возможные значения я могу установить для vm.vfs_cache_pressure? Поможет ли установка vm.vfs_cache_pressure = 200 решить мою проблему? есть ли способ полностью запретить использование cache/buff, если это приводит к использованию подкачки?
Какие еще варианты я могу попробовать? Как я могу увидеть, какие файлы и какие объекты кешируются?
Существуют ли какие-либо другие опции, кроме vm.vfs_cache_pressureи vm.swappiness, которые могут изменить использование, приоритет баффа / кеша?
Идея состоит в том, чтобы не использовать swap, если есть некоторая доступная память (aviable), и отдать приоритет очистке Buff/cache, и только если это невозможно, и только тогда использовать подкачку (чтобы предотвратить завершение процесса) и конечно, не завершайте процессы, если есть доступный своп.