Подтвердить что ты не робот

Amazon RDS исчерпывает свободную память. Я должен беспокоиться?

У меня есть экземпляр RDS от Amazon. Свободная память снижается с момента установки в течение 1-2 недель, начиная с 15 ГБ памяти до примерно 250 МБ. Поскольку он снизил этот минимум в последние дни, он начал напоминать пилообразный шаблон, в котором свободная память падает до этого диапазона (250 - 350 МБ), а затем возвращается вверх до 500 - 600 МБ в пилообразном паттерне.

Не было заметного снижения качества приложения. Тем не менее, я беспокоюсь, что в БД не хватит памяти и аварии.

Есть ли опасность, что экземпляр RDS будет исчерпан? Есть ли какой-либо параметр или параметр, который я должен искать, чтобы определить, правильно ли настроен экземпляр? Что вызывает этот пильный рисунок?

Freeable Memory Declining

4b9b3361

Ответ 1

Свободное поле памяти используется MySQL для буферизации и кеширования для собственных процессов. Нормально, что количество свободной памяти уменьшается со временем. Я бы не стал волноваться, что он пинает старую информацию, поскольку она требует больше места.

Ответ 2

Короткий ответ - вы не должны беспокоиться о FreeableMemory, если он не стал действительно низким (около 100-200 Мб) или значительная свопинг (см. метку RDS SwapUsage).

FreeableMemory не является метрикой MySQL, а метрикой ОС. Трудно дать точное определение, но вы можете рассматривать его как память, которую ОС сможет выделить любому, кто ее запрашивает (в вашем случае это, вероятно, будет MySQL). У MySQL есть набор настроек, которые ограничивают его использование общей памяти до некоторой степени (вы можете использовать что-то вроде this для фактического вычисления). Маловероятно, что ваш экземпляр когда-либо достигнет этого предела, из-за того, что в целом вы никогда не достигаете максимального количества соединений, но это все еще возможно.

Теперь вернемся к "снижению" в метрике FreeableMemory. Для MySQL большая часть памяти потребляется пулом буферов InnoDB (подробнее см. здесь). У экземпляров RDS в конфигурации по умолчанию есть размер для этого буфера, установленного на 75% физической памяти хостов, что в вашем случае составляет около 12 ГБ. Этот буфер используется для кэширования всех данных БД, которые используются как для операций чтения, так и для записи. Таким образом, в вашем случае, поскольку этот буфер действительно большой - он медленно заполняется данными, которые кэшируются (вполне вероятно, что этот буфер на самом деле достаточно велик, чтобы кэшировать всю БД). Поэтому, когда вы впервые запускаете экземпляр, этот буфер пуст, и как только вы начинаете читать/записывать материал в БД, все эти данные вводятся в кеш. Они останутся здесь до того момента, когда этот кеш станет полным, и придет новый запрос. В это время наименее недавно используемые данные будут заменены новыми данными. Таким образом, первоначальный спад FreeableMemory после перезапуска экземпляра DB объясняет это. Это неплохо, потому что вы действительно хотите, чтобы ваши данные были кешем, чтобы ваша БД работала быстрее. Единственное, что может пойти неприятно, - это то, что часть или весь этот буфер будет вытеснен из физической памяти в swap. В этот момент у вас будет огромное снижение производительности.

В качестве профилактического обслуживания может быть хорошей идеей настроить MySQL max-память, используемую для разных вещей, в случае, если метрика FreeableMemory постоянно находится на уровне 100-200 Мб, чтобы уменьшить возможность замены.

Ответ 3

После нескольких обращений в службу поддержки AWS я обнаружил, что настройка групп параметров, особенно общего буфера, может помочь уменьшить их, чтобы сохранить зарезервированное количество, чтобы избежать падений или отказов из-за нехватки памяти

Ответ 4

Я столкнулся с той же проблемой, объем свободной памяти в моем экземпляре опустился ниже 40 МБ, перезагрузка экземпляра привела к сбросу памяти.