Как указано в заголовке, у нас есть приложение NodeJS, работающее на экземпляре EC2 в AWS, в котором время от времени заканчивается память и процесс завершается.
С точки зрения бизнеса это не помеха, поскольку избыточные системы обеспечивают запуск другого экземпляра и его доступность через балансировщик нагрузки. Но мы все равно хотели бы выяснить, что именно заставляет экземпляр исчерпывать память, чтобы мы могли полностью предотвратить это.
Мы просмотрели журналы, связанные с завершением процесса, чтобы попытаться выяснить, что происходит, но из-за отсутствия доступной памяти, похоже, что ОС не может записывать какие-либо журналы в это время. После завершения процесса она регистрирует, что подавила ряд журналов, а затем продолжает работать как обычно. Поэтому мы предполагаем, что подавление журналов не позволяет нам получить больше информации о фактической причине проблемы.
Мы уже пытались отключить подавление журналов, но пока процесс не отвечает, журнал по-прежнему не регистрируется, за исключением того, что теперь он не сообщает количество подавленных журналов.
Есть идеи, как можно выяснить, что именно заставляет процесс исчерпывать память?
решение1
и убивает процесс.
Theпервыйто, что вам нужно сделать, это остановить исчерпание памяти. Уменьшите перерасход на хосте.
Добавьте новый файл в /etc/sysctl.d, содержащий (изначально):
vm.overcommit_memory = 2
vm.overcommit_ratio = 15
Затем запустите sudo sysctl -p
(позже вы, возможно, захотите изменить соотношение).
Затем вы можете начать искать то, что потребляет много памяти.