Назад | Перейти на главную страницу

Полностью удалить своп или установить для свопинга значение 0?

При управлении сервером с 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, вы можете заметить, что на узле используется только память подкачки, даже если память хоста была доступна.