TLDR: если вам нужен PostgreSQL на AWS и вам нужна стабильная стабильность, запустите PostgreSQL на EC2 (на данный момент) и выполните некоторые настройки ядра для перегрузки
Я постараюсь быть кратким, но вы не единственный, кто видел это, и это известная (внутренняя для Amazon) проблема с RDS и Aurora PostgreSQL.
OOM Killer на RDS / Aurora
Убийца OOM работает на экземплярах RDS и Aurora, поскольку они поддерживаются виртуальными машинами Linux, а OOM является неотъемлемой частью ядра.
Основная причина
Основная причина заключается в том, что в конфигурации ядра Linux по умолчанию предполагается, что у вас есть виртуальная память (файл или раздел подкачки), но экземпляры EC2 (и виртуальные машины, поддерживающие RDS и Aurora), по умолчанию не имеют виртуальной памяти. Существует один раздел, и файл подкачки не определен. Когда linux думает, что у него есть виртуальная память, он использует стратегию, называемую «overcommitting», что означает, что он позволяет процессам запрашивать и получать больший объем памяти, чем объем оперативной памяти, который фактически имеет система. Два настраиваемых параметра управляют этим поведением:
vm.overcommit_memory - определяет, разрешено ли ядру избыточное выполнение (0 = да = по умолчанию)
vm.overcommit_ratio - какой процент подкачки system + может перегрузить ядро. Если у вас есть 8 ГБ оперативной памяти и 8 ГБ подкачки, а ваш vm.overcommit_ratio = 75, ядро предоставит процессам до 12 ГБ или памяти.
Мы настроили экземпляр EC2 (где мы могли бы настроить эти параметры), и следующие настройки полностью предотвратили уничтожение бэкэндов PostgreSQL:
vm.overcommit_memory = 2
vm.overcommit_ratio = 75
vm.overcommit_memory = 2 указывает linux не перегружать (работать в рамках ограничений системной памяти), а vm.overcommit_ratio = 75 говорит linux не разрешать запросы для более чем 75% памяти (только пользовательские процессы могут получать до 75% памяти).
У нас есть открытый случай с AWS, и они взяли на себя обязательство разработать долгосрочное исправление (используя параметры настройки ядра или cgroups и т. Д.), Но у нас пока нет ETA. Если у вас возникла эта проблема, я призываю вас открыть дело с AWS и ссылочным случаем # 5881116231, чтобы они знали, что эта проблема также затрагивает вас.
Короче говоря, если вам нужна стабильность в ближайшем будущем, используйте PostgreSQL на EC2. Если вам необходимо использовать RDS или Aurora PostgreSQL, вам нужно будет увеличить размер своего экземпляра (за дополнительную плату) и надеяться на лучшее, поскольку превышение размера не гарантирует, что у вас по-прежнему не будет проблем.