У меня есть сервис .NET (Core 2.0), который я переместил из Windows в Linux на AWS. Экземпляры микро с 1 Гб оперативной памяти.
Я добавил 1 ГБ пространства подкачки в экземпляр linux, а также установил swappiness = 100, но сервер зависает при заполнении физической памяти. Сам процесс замедляется почти до остановки, и даже нажатие клавиши ENTER на bash иногда занимает 10 секунд, чтобы появилась новая строка.
Работая top
я вижу свободную память обычно 10, 20мб. Процесс использует 800 МБ + ОЗУ, а подкачка всегда почти пуста, при использовании не более 20 МБ. Даже пробыть там в течение часа не поменялось больше.
Я вижу, что кредиты дисков и процессоров в AWS составляют почти 100%, так что это не ограничивает использование ресурсов. Кроме того, существует около сотни таких экземпляров, и я несколько раз заменял их, поведение всегда одинаковое, поэтому это не выглядит как проблема с плохим экземпляром .
Что меня беспокоит, так это то, что это не происходило в Windows, а экземпляры Linux используют примерно на 200 МБ меньше памяти для базовой системы.
Есть ли какие-либо настройки, которые мне нужно настроить, кроме подкачки, чтобы заставить Linux перемещать больше памяти для подкачки?
Редактировать: Swap правильно настроен через 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