В ядре Linux есть компонент, называемый убийцей OOM (нехватки памяти ). Как указал Патрик в комментариях, убийцу OOM можно отключить, но по умолчанию разрешена избыточная фиксация (и, таким образом, включен убийца OOM ).
Приложения запрашивают у ядра дополнительную память, и ядро может отказать им в ее предоставлении (из-за нехватки памяти или из-за того, что ulimit
было использовано, чтобы лишить процесс дополнительной памяти ). Если overcommit включен, то приложение запросило некоторое количество памяти и получило количество, но если приложение записывает в новую страницу памяти (в первый раз ), и ядро фактически должно выделить память для этого, но не может этого сделать что тогда ядро должно решить, какой процесс убить, чтобы освободить память.
Ядро скорее убьет новые процессы, чем старые, особенно те, которые (вместе со своими потомками )потребляют много памяти. Таким образом, в вашем случае может начаться новый процесс, но, вероятно, он будет убит.
Вы можете использовать файлы
/proc/self/oom_adj
/proc/self/oom_score
/proc/self/oom_score_adj
, чтобы проверить текущие настройки и сообщить ядру, в каком порядке оно должно убивать процессы, если это необходимо.
Вы используете одинарные кавычки. В bash переменные в одинарных кавычках не раскрываются.
ruby -rjson -e "j = JSON.parse($json); puts j[\"Instances\"][0][\"ImageId\"]"