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

kswap использует 100% ЦП даже при наличии более 100 ГБ ОЗУ

Я использую виртуальную машину Centos 7 ESXi с почти 300 ГБ ОЗУ и 24 виртуальными ЦП.

Средняя нагрузка составляет 3, и приложения почти никогда не используют более 150 ГБ ОЗУ. Остальная часть доступной памяти используется Linux для кеширования.

Проблема в том, что когда кеш заполняет доступную оперативную память, два процесса kswapd начинают использовать 100% ЦП, и внезапно я вижу, что все ЦП также показывают 99% использования системы (это не ожидание или пользователь, это в основном sys).

Это вызовет высокую нагрузку (100+) в течение нескольких минут, пока система не восстановится и нагрузка снова не упадет до 3.

На данный момент у меня нет раздела подкачки, но даже когда он у меня был, эта проблема возникала.

Одно «решение», которое я нашел, - это выполнять следующую команду каждый день:

 echo 3 > /proc/sys/vm/drop_caches

который сбрасывает буферы / кеши. Это «исправит» проблему, поскольку использование кеша никогда не достигает 100%.

Мои вопросы:

В конце концов, насколько я понимаю, основная функция оперативной памяти должна использоваться приложениями. Кэширование - это просто второстепенная функция, которую можно отбросить / проигнорировать, если у вас недостаточно памяти.

Моя версия ядра - 3.10.0-229.14.1.el7.x86_64.

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

Посмотрите, поможет ли это:

sysctl -w vm.zone_reclaim_mode=0

Более подробное описание проблем, которые могут возникнуть с политикой NUMA по умолчанию в большинстве систем, см. https://engineering.linkedin.com/performance/optimizing-linux-memory-management-low-latency-high-throughput-databases