
Код выхода 137 запускается, когда модуль или контейнер в вашей среде Kubernetes превышает объем памяти, который им назначен. Обычно этот код выхода сопровождается или просто известен как OOMKilled. Killed в этом описании относится к результату этой ошибки, которая приводит к прекращению работы модуля.
Аббревиатура OOM означает нехватку памяти, что вызвано превышением установленного предела памяти модуля. Если вы не знаете, почему ваш модуль прекратил работу, один из самых простых способов выяснить это — запустить команду kubectl get pods, которая затем вызовет обновление статуса для определенного модуля. Затем вы найдете OOMKilled, который предупредит вас о том, что сработал код выхода 137.
Откуда OOMKilled?
Хотя OOMKilled — это ответ, который вы, вероятно, увидите в своей среде Kubernetes, на самом деле он не является родным для этой системы. На самом деле, это центральная особенность программирования Linux который был перенесен в Kubernetes, чтобы упростить эту систему. В ядре Linux OOMKilled известен как OOM Killer, предлагая те же предупреждения и ответы, что и в Kubernetes.
Как правило, если платформа занимает слишком много памяти в определенной системе, Linux перемещается по разным узлам и решает, какие из них убить, оценивая их все с помощью oom_score по шкале того, какие узлы занимают больше всего памяти, чем остальные. минимум памяти. Узлы, занимающие больше всего памяти, с наибольшей вероятностью будут завершены, при этом код выхода 137 является аргументом для этого.
Каковы причины OOMKilled?
Если ваша экосистема Kubernetes возвращается с «выход с кодом 137‘, то вы, вероятно, столкнулись с проблемой памяти в этой системе. Хотя это может быть неприятной проблемой, это не конец света, поскольку эту проблему довольно легко решить.
Обычно существует несколько основных причин OOMKilled в среде Kubernetes:
- Ограничения памяти – При работе в среде Kubernetes обычно сотни узлов работают на общее благо. Хотя эта система эффективна, ограничения памяти могут привести к появлению кода выхода 137, который затем завершит работу модуля, в котором вы работаете. Одной из наиболее распространенных причин этого является ограничение памяти в модулях. В каждом модуле Kubernetes вы можете указать ограничение памяти для модуля. Если это превышено, вы получите ошибку OOMKilled.
- Утечка памяти – Если на контейнер наложен определенный лимит памяти, то иногда он может достичь этого лимита, а затем начать просачиваться в другие процессы. Это будет помечено как ошибка, а затем завершено.
- Перегруженные узлы — Когда модуль использует больше памяти, чем назначено ему, вы получите эту конкретную ошибку.
Поскольку это ошибка, связанная с памятью, любая из причин этого кода выхода будет связана с плохим управлением или использованием памяти в вашей экосистеме Kubernetes.
Как исправить код выхода 137?
Как упоминалось ранее, код выхода 137 — одна из самых простых ошибок для исправления, поскольку все сводится либо к сокращению ваших процессов, либо к увеличению объема памяти, который назначается каждому из узлов.
Если вы пытаетесь исправить код выхода 137, попробуйте выполнить следующие три действия:
- Увеличить место на диске – Очень просто, самый простой способ исправить любую память, которая связана с памятью, — это увеличить дисковое пространство, с которым должна работать ваша среда Kubernetes. Это общее исправление, так как увеличение объема пространства гарантирует, что ваша экосистема больше не достигнет своего максимума. Однако, если вы постоянно сталкиваетесь с этой проблемой, вам следует попробовать следующие два исправления, чтобы убедиться, что вы создаете систему с эффективным использованием памяти.
- Добавить дополнительный том pod — В каждом поде в Kubernetes вы можете установить минимальный и максимальный объем памяти, который разрешено использовать определенному поду. Если несколько модулей постоянно получают код выхода 137, то это признак того, что вам нужно увеличить объем пространства, которое вы предоставляете для модуля. Увеличив максимальное ограничение вручную в модулях, испытывающих наибольшую нагрузку, вы сможете снизить частоту возникновения этой проблемы.
- Уменьшить число параллельных бегунов – Параллельная обработка — это когда вы одновременно запускаете две системы для исправления или поддержки разных функций. Хотя это повышает эффективность Kubernetes и того, чего вы можете с его помощью достичь, это также приводит к гораздо большей нагрузке на память экосистемы в целом. Реже используя параллельный бегвы сможете уменьшить общее использование памяти вашей системой, помогая уменьшить количество кодов выхода 137, с которыми вы сталкиваетесь.
Выполнив эти три шага, вы, скорее всего, увеличите объем памяти, которой располагает ваша система, а также оптимизируете отдельные модули, чтобы убедиться, что у них достаточно памяти для выполнения всех своих функций без неожиданного завершения работы.
Последние мысли
Если вы столкнулись с кодом выхода 137 в Kubernetes, вероятно, проблема связана с тем, как ваша среда Kubernetes управляет пространством в своих модулях, узлах и контейнерах. В качестве базового уровня Kubernetes предлагает выделить каждому узлу в кластере около 300 МБ памяти, чего должно быть достаточно для правильной работы узла.
Однако, в зависимости от сложности вашей экосистемы Kubernetes, всегда лучше иметь как можно больше памяти. Если в вашей системе достаточно места, назначьте больший объем хранилища, чтобы помочь каждому узлу работать без необходимости появления кода выхода 137.
Сообщение Справка с открытым исходным кодом: что такое код выхода 137 и можно ли его исправить? появился сначала на .