При управлении сервером с 512 ГБ ОЗУ я столкнулся с процессом, который продолжает использовать подкачку до тех пор, пока не достигнет 100% пространства подкачки, а затем перестает потреблять больше (6 ГБ подкачки), но продолжает работать нормально (хотя, когда запрос входит в процесс, требуется долгое время (20+ мин) до требуемой производительности).
Даже установка swappiness на 0
не препятствует этому процессу подкачки.
Обмен происходит пока free
показывает это:
# free -h --giga
total used free shared buff/cache available
Mem: 515G 16G 2.3G 30M 497G 496G
Swap: 5.8G 1.0M 5.8G
Рассматриваемый процесс:
# smem -s swap -t -n -k
PID User Command Swap USS PSS RSS
(...)
36776 1000 java -XX:+UseG1GC -Xms1G -X 1.6M 13.4G 13.4G 13.4G
-------------------------------------------------------------------------------
148 11 2.0M 15.1G 15.2G 15.9G
Он продолжает расти и расти с течением времени (со скоростью ~ 20 МБ / час), пока не будет израсходован 100% своп. Возможно, стоит упомянуть, что он работает в контейнере докеров, но я не знаю, влияет ли это на что-нибудь.
Замена:
# cat /proc/sys/vm/swappiness
0
Я действительно хочу полностью отключить свопинг, но этот ответ категорически не рекомендует. Как я могу полностью сохранить память этих программ в ОЗУ?
Поскольку ваш вопрос касается процесса внутри контейнера Docker, стоит проверить, не упустили ли вы vm.overcommit_memory=1
конфигурация, как описано здесь: Узел, использующий память подкачки вместо памяти хоста
По умолчанию Docker рекомендует использовать значение vm.swappiness = 0 для сред Docker, что предотвращает подкачку, за исключением случая OOM (OutOfMemory). Все узлы должны установить vm.overcommit_memory = 1, что говорит ядру всегда разрешать выделение памяти до тех пор, пока действительно не останется памяти. В этой статье объясняется ситуация, которая может возникнуть, когда для vm.swappiness используется значение, отличное от 0. Если для vm.swappiness задано значение выше 0, вы можете заметить, что на узле используется только память подкачки, даже если память хоста была доступна.