Система Linux полностью не отвечает, при этом много свободного пространства подкачки

Система Linux полностью не отвечает, при этом много свободного пространства подкачки

У меня есть сервис .NET (Core 2.0), который я перенес с экземпляров Windows на Linux на AWS. Экземпляры микро с 1Gb RAM.

Я добавил 1Gb пространства подкачки к экземпляру linux, а также установил swappiness=100, но сервер зависает, когда физическая память заполнена. Сам процесс замедляется почти до полной остановки, и даже нажатие ENTER на bash иногда занимает 10 секунд, чтобы появилась новая строка.

Запуская, topя вижу, что свободной памяти обычно 10, 20 МБ. Процесс использует 800 МБ+ оперативной памяти, а подкачка всегда почти пуста, с использованием максимум 20 МБ. Даже если оставить там на час, подкачка не увеличится.

Я вижу, что Disk и CPU credits на AWS почти на 100%, так что это не ограничивает использование ресурсов. Кроме того, есть около сотни таких экземпляров, и я заменял их много раз, поведение всегда одинаковое, так что это не похоже наплохой примерпроблема.

Меня беспокоит то, что этого не произошло в Windows, а экземпляры Linux используют примерно на 200 МБ меньше памяти базовой системы.

Нужно ли мне настроить какие-либо параметры, помимо swappiness, чтобы Linux перемещал больше памяти в раздел подкачки?

Редактировать:Своп настроен правильно через cloud-init и прекрасно выдерживает перезагрузки:

Настраивать:

fallocate -l 1024M /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
sysctl vm.swappiness=100

free -mпосле загрузки:

             total       used       free     shared    buffers     cached
Mem:           993        232        760          0          7        152
-/+ buffers/cache:         72        921
Swap:         1023          0       1023

решение1

Я нашел настоящую проблему. Приложение работает внутри докера, иAWS намеренно блокирует использование свопа в контейнерах ECSпо какой-то причине. Этот блок не повлиял на Windows, потому что мы раньше не использовали ECS для управления Docker.

После разговора с их поддержкой выяснилось, что они не поддерживают своп внутри контейнеров и не знают, когда будут. Так что мне придется выйти из ECS и управлять докером самостоятельно.

решение2

Ну, ваша ошибка может быть на самом деле совсем небольшой. Такое высокое значение swappiness вызовет проблемы с некоторыми конфигурациями ОС. Попробуйте значение типа 15. (Просто примечание: заставлять вашу систему предпочитать swap — ужасная идея. Вашей системе нужно использовать фактическую оперативную память для нормальной работы. [в случае, если вы не знали или перепутали, swappiness — это % свободной оперативной памяти до использования swap, поэтому 15 означает, что 85% оперативной памяти должны быть использованы до использования раздела SWAP.])

И еще, как вы добавили пространство подкачки? Если вы просто изменили конфигурации и не создали новый раздел или оставили ошибки в файле /etc/fstab, вы не сможете использовать подкачку, и все будет сломано, так как система попытается записать во что-то, чего там нет, или во что она не может записать (или произойдет что-то гораздо более интересное). Я сломал не одну установку с помощью этих методов.

Связанный контент