[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/errors/linux/oom-killer":3,"mdc-yvfuxq-key":1234,"mdc-fxck8f-key":1259,"mdc--i6wmox-key":1291,"mdc-3nkulo-key":1330,"mdc-qqkp0u-key":1361,"mdc-mj8e2q-key":1386,"mdc-dnx1a7-key":1424,"mdc--nljuv0-key":1454,"mdc--fo1qut-key":1479,"mdc-y90eh0-key":1516,"related-/errors/linux/out-of-memory,/guides/linux/monitor-memory-usage,/guides/linux/systemd-cgroups":1533},{"id":4,"title":5,"appliesTo":6,"author":11,"body":12,"canonical":1162,"code":1162,"createdAt":1163,"description":1164,"difficulty":1165,"draft":1166,"estimatedTime":1167,"extension":1168,"faq":1169,"howToSteps":1182,"howToTotalTime":1201,"image":1162,"keywords":1202,"locale":1212,"meta":1213,"navigation":540,"path":1214,"platform":1215,"related":1216,"section":1220,"seo":1221,"severity":1222,"stem":1223,"summary":1224,"tags":1225,"twitterCreator":1162,"twitterSite":1162,"type":1232,"updatedAt":1163,"__hash__":1233},"content_ru/errors/linux/oom-killer.md","OOM Killer в Linux: как обнаружить и предотвратить",[7,8,9,10],"Ubuntu 20.04+","CentOS 7+","Debian 11+","ядро Linux 4.15+","FixPedia Team",{"type":13,"value":14,"toc":1146},"minimark",[15,20,28,31,47,55,59,66,77,83,87,90,373,376,380,389,404,410,449,455,477,483,493,497,503,509,585,590,667,671,674,684,701,712,718,727,730,736,745,749,752,782,785,844,848,932,936,939,944,990,995,1055,1065,1069,1111,1115,1118,1133,1136,1142],[16,17,19],"h2",{"id":18},"что-такое-oom-killer-и-почему-он-появляется","Что такое OOM Killer и почему он появляется",[21,22,23,27],"p",{},[24,25,26],"strong",{},"OOM Killer (Out-of-Memory Killer)"," — это механизм ядра Linux, который автоматически завершает процессы, когда система исчерпала доступную оперативную память (RAM) и swap-пространство. Его цель — освободить память, чтобы ядро и критические системные процессы могли продолжить работу, предотвращая полный крах системы.",[21,29,30],{},"Обычно OOM Killer активируется, когда:",[32,33,34,38,41,44],"ul",{},[35,36,37],"li",{},"Физическая RAM и swap заполнены на 100%.",[35,39,40],{},"Приложение имеет утечку памяти (memory leak).",[35,42,43],{},"На сервере запущено слишком много memory-intensive процессов.",[35,45,46],{},"Неправильно настроены лимиты памяти в контейнерах (Docker/Kubernetes).",[21,48,49,50,54],{},"Если вы видите в логах сообщение ",[51,52,53],"code",{},"Killed process"," или приложение внезапно завершается с кодом 137 (SIGKILL), скорее всего, виноват OOM Killer.",[16,56,58],{"id":57},"как-работает-oom-killer","Как работает OOM Killer",[21,60,61,62,65],{},"Ядро Linux вычисляет ",[24,63,64],{},"oom_score"," для каждого процесса на основе:",[32,67,68,71,74],{},[35,69,70],{},"Доли памяти, потребляемой процессом (основной фактор).",[35,72,73],{},"Привилегий процесса (процессы root имеют меньший шанс быть убитыми).",[35,75,76],{},"Времени жизни процесса (долгоживущие процессы могут иметь более высокий score).",[21,78,79,80,82],{},"Процесс с самым высоким ",[51,81,64],{}," выбирается для завершения. Однако это не всегда оптимально: OOM Killer может убить важный сервис, а оставить фоновый процесс с утечкой.",[16,84,86],{"id":85},"диагностика-проблемы","Диагностика проблемы",[21,88,89],{},"Перед любыми действиями нужно подтвердить, что проблема именно в OOM Killer.",[91,92,93,151,193,240],"ol",{},[35,94,95,98,99,132,135,136,144,146,147,150],{},[24,96,97],{},"Проверьте логи ядра",":",[100,101,106],"pre",{"className":102,"code":103,"language":104,"meta":105,"style":105},"language-bash shiki shiki-themes github-light github-dark","dmesg | grep -i kill\n","bash","",[51,107,108],{"__ignoreMap":105},[109,110,113,117,121,124,128],"span",{"class":111,"line":112},"line",1,[109,114,116],{"class":115},"sScJk","dmesg",[109,118,120],{"class":119},"szBVR"," |",[109,122,123],{"class":115}," grep",[109,125,127],{"class":126},"sj4cs"," -i",[109,129,131],{"class":130},"sZZnC"," kill\n",[133,134],"br",{},"Пример вывода:",[100,137,142],{"className":138,"code":140,"language":141},[139],"language-text","[12345.678] Out of memory: Kill process 1234 (nginx) score 500 or sacrifice child\n[12345.680] Killed process 1234 (nginx) total-vm:1234567kB, anon-rss:456789kB, file-rss:0kB\n","text",[51,143,140],{"__ignoreMap":105},[133,145],{},"Здесь видно, что процесс ",[51,148,149],{},"nginx"," с PID 1234 был убит.",[35,152,153,98,156,169,171,172,175,176,175,179,182,183,186,187,189,190,192],{},[24,154,155],{},"Оцените общую память",[100,157,159],{"className":102,"code":158,"language":104,"meta":105,"style":105},"free -h\n",[51,160,161],{"__ignoreMap":105},[109,162,163,166],{"class":111,"line":112},[109,164,165],{"class":115},"free",[109,167,168],{"class":126}," -h\n",[133,170],{},"Обратите внимание на столбцы ",[51,173,174],{},"total",", ",[51,177,178],{},"used",[51,180,181],{},"available"," и ",[51,184,185],{},"Swap",". Если ",[51,188,181],{}," близок к нулю, а ",[51,191,185],{}," также заполнен — система в критическом состоянии.",[35,194,195,98,198,225,227,228,231,232,235,236,239],{},[24,196,197],{},"Найдите процесс-потребителя",[100,199,201],{"className":102,"code":200,"language":104,"meta":105,"style":105},"top -b -n 1 | head -20\n",[51,202,203],{"__ignoreMap":105},[109,204,205,208,211,214,217,219,222],{"class":111,"line":112},[109,206,207],{"class":115},"top",[109,209,210],{"class":126}," -b",[109,212,213],{"class":126}," -n",[109,215,216],{"class":126}," 1",[109,218,120],{"class":119},[109,220,221],{"class":115}," head",[109,223,224],{"class":126}," -20\n",[133,226],{},"Или используйте ",[51,229,230],{},"htop"," с сортировкой по памяти (клавиша ",[51,233,234],{},"F6"," → ",[51,237,238],{},"MEM%",").",[35,241,242,98,245,367,369,370,372],{},[24,243,244],{},"Проверьте oom_score процессов",[100,246,248],{"className":102,"code":247,"language":104,"meta":105,"style":105},"for pid in $(ps -e | awk '{print $1}' | tail -n +2); do\n  echo \"PID $pid: $(cat /proc/$pid/oom_score 2>/dev/null) (adj: $(cat /proc/$pid/oom_score_adj 2>/dev/null))\"\ndone | sort -k3 -n -r | head -10\n",[51,249,250,295,341],{"__ignoreMap":105},[109,251,252,255,259,262,265,268,271,273,276,279,281,284,286,289,292],{"class":111,"line":112},[109,253,254],{"class":119},"for",[109,256,258],{"class":257},"sVt8B"," pid ",[109,260,261],{"class":119},"in",[109,263,264],{"class":257}," $(",[109,266,267],{"class":115},"ps",[109,269,270],{"class":126}," -e",[109,272,120],{"class":119},[109,274,275],{"class":115}," awk",[109,277,278],{"class":130}," '{print $1}'",[109,280,120],{"class":119},[109,282,283],{"class":115}," tail",[109,285,213],{"class":126},[109,287,288],{"class":130}," +2",[109,290,291],{"class":257},"); ",[109,293,294],{"class":119},"do\n",[109,296,298,301,304,307,310,313,316,318,321,324,327,329,331,333,336,338],{"class":111,"line":297},2,[109,299,300],{"class":126},"  echo",[109,302,303],{"class":130}," \"PID ",[109,305,306],{"class":257},"$pid",[109,308,309],{"class":130},": $(",[109,311,312],{"class":115},"cat",[109,314,315],{"class":130}," /proc/",[109,317,306],{"class":257},[109,319,320],{"class":130},"/oom_score ",[109,322,323],{"class":119},"2>",[109,325,326],{"class":130},"/dev/null) (adj: $(",[109,328,312],{"class":115},[109,330,315],{"class":130},[109,332,306],{"class":257},[109,334,335],{"class":130},"/oom_score_adj ",[109,337,323],{"class":119},[109,339,340],{"class":130},"/dev/null))\"\n",[109,342,344,347,349,352,355,357,360,362,364],{"class":111,"line":343},3,[109,345,346],{"class":119},"done",[109,348,120],{"class":119},[109,350,351],{"class":115}," sort",[109,353,354],{"class":126}," -k3",[109,356,213],{"class":126},[109,358,359],{"class":126}," -r",[109,361,120],{"class":119},[109,363,221],{"class":115},[109,365,366],{"class":126}," -10\n",[133,368],{},"Это покажет топ-10 процессов с наивысшим ",[51,371,64],{},".",[374,375],"in-article-ad",{},[16,377,379],{"id":378},"методы-решения-проблемы","Методы решения проблемы",[381,382,384,385,388],"h3",{"id":383},"шаг-1-настройка-oom_score_adj-для-защиты-ключевых-процессов","Шаг 1: Настройка ",[51,386,387],{},"oom_score_adj"," для защиты ключевых процессов",[21,390,391,392,395,396,399,400,403],{},"Каждому процессу можно задать ",[24,393,394],{},"adj","-значение от ",[51,397,398],{},"-1000"," (максимальная защита) до ",[51,401,402],{},"+1000"," (максимальный приоритет на убийство). Это самый быстрый способ защитить процесс.",[21,405,406,409],{},[24,407,408],{},"Для одноразовой настройки"," (до перезагрузки):",[100,411,413],{"className":102,"code":412,"language":104,"meta":105,"style":105},"# Замените \u003CPID> на идентификатор процесса\necho -1000 > /proc/\u003CPID>/oom_score_adj\n",[51,414,415,421],{"__ignoreMap":105},[109,416,417],{"class":111,"line":112},[109,418,420],{"class":419},"sJ8bj","# Замените \u003CPID> на идентификатор процесса\n",[109,422,423,426,429,432,434,437,440,443,446],{"class":111,"line":297},[109,424,425],{"class":126},"echo",[109,427,428],{"class":126}," -1000",[109,430,431],{"class":119}," >",[109,433,315],{"class":130},[109,435,436],{"class":119},"\u003C",[109,438,439],{"class":130},"PI",[109,441,442],{"class":257},"D",[109,444,445],{"class":119},">",[109,447,448],{"class":130},"/oom_score_adj\n",[21,450,451,454],{},[24,452,453],{},"Для постоянной настройки через systemd"," (рекомендуется):\nСоздайте или отредактируйте юнит:",[100,456,460],{"className":457,"code":458,"language":459,"meta":105,"style":105},"language-ini shiki shiki-themes github-light github-dark","# /etc/systemd/system/ваш-сервис.service.d/oom-protect.conf\n[Service]\nOOMScoreAdjust=-1000\n","ini",[51,461,462,467,472],{"__ignoreMap":105},[109,463,464],{"class":111,"line":112},[109,465,466],{},"# /etc/systemd/system/ваш-сервис.service.d/oom-protect.conf\n",[109,468,469],{"class":111,"line":297},[109,470,471],{},"[Service]\n",[109,473,474],{"class":111,"line":343},[109,475,476],{},"OOMScoreAdjust=-1000\n",[21,478,479,480,372],{},"Затем перезапустите сервис: ",[51,481,482],{},"systemctl daemon-reload && systemctl restart ваш-сервис",[21,484,485,488,489,492],{},[24,486,487],{},"Важно",": Не устанавливайте ",[51,490,491],{},"oom_score_adj=-1000"," для всех процессов — это может привести к тому, что OOM Killer не сможет освободить память и система зависнет.",[381,494,496],{"id":495},"шаг-2-использование-cgroups-для-ограничения-памяти","Шаг 2: Использование cgroups для ограничения памяти",[21,498,499,502],{},[24,500,501],{},"cgroups (control groups)"," позволяют задать жёсткие лимиты памяти для группы процессов. Это лучший способ для контейнеров и изолированных сервисов.",[21,504,505,508],{},[24,506,507],{},"Через systemd"," (современные дистрибутивы):",[100,510,512],{"className":102,"code":511,"language":104,"meta":105,"style":105},"# Запустить команду с лимитом 500 МБ\nsystemd-run --scope -p MemoryMax=500M /путь/к/команде\n\n# Или для существующего сервиса создайте дроп-ин:\n# /etc/systemd/system/ваш-сервис.service.d/limits.conf\n[Service]\nMemoryMax=1G\nMemorySwapMax=2G  # если нужен swap\n",[51,513,514,519,536,542,548,554,559,571],{"__ignoreMap":105},[109,515,516],{"class":111,"line":112},[109,517,518],{"class":419},"# Запустить команду с лимитом 500 МБ\n",[109,520,521,524,527,530,533],{"class":111,"line":297},[109,522,523],{"class":115},"systemd-run",[109,525,526],{"class":126}," --scope",[109,528,529],{"class":126}," -p",[109,531,532],{"class":130}," MemoryMax=500M",[109,534,535],{"class":130}," /путь/к/команде\n",[109,537,538],{"class":111,"line":343},[109,539,541],{"emptyLinePlaceholder":540},true,"\n",[109,543,545],{"class":111,"line":544},4,[109,546,547],{"class":419},"# Или для существующего сервиса создайте дроп-ин:\n",[109,549,551],{"class":111,"line":550},5,[109,552,553],{"class":419},"# /etc/systemd/system/ваш-сервис.service.d/limits.conf\n",[109,555,557],{"class":111,"line":556},6,[109,558,471],{"class":257},[109,560,562,565,568],{"class":111,"line":561},7,[109,563,564],{"class":257},"MemoryMax",[109,566,567],{"class":119},"=",[109,569,570],{"class":130},"1G\n",[109,572,574,577,579,582],{"class":111,"line":573},8,[109,575,576],{"class":257},"MemorySwapMax",[109,578,567],{"class":119},[109,580,581],{"class":130},"2G",[109,583,584],{"class":419},"  # если нужен swap\n",[21,586,587,98],{},[24,588,589],{},"Вручную через cgroup v2",[100,591,593],{"className":102,"code":592,"language":104,"meta":105,"style":105},"# Создайте cgroup\nsudo mkdir /sys/fs/cgroup/mylimit\n# Установите лимит 1 ГБ\necho $((1*1024*1024*1024)) | sudo tee /sys/fs/cgroup/mylimit/memory.max\n# Запустите процесс в этой группе\nsudo echo $$ > /sys/fs/cgroup/mylimit/cgroup.procs && /путь/к/вашему/приложению\n",[51,594,595,600,611,616,641,646],{"__ignoreMap":105},[109,596,597],{"class":111,"line":112},[109,598,599],{"class":419},"# Создайте cgroup\n",[109,601,602,605,608],{"class":111,"line":297},[109,603,604],{"class":115},"sudo",[109,606,607],{"class":130}," mkdir",[109,609,610],{"class":130}," /sys/fs/cgroup/mylimit\n",[109,612,613],{"class":111,"line":343},[109,614,615],{"class":419},"# Установите лимит 1 ГБ\n",[109,617,618,620,623,626,629,632,635,638],{"class":111,"line":544},[109,619,425],{"class":126},[109,621,622],{"class":257}," $((",[109,624,625],{"class":115},"1*1024*1024*1024",[109,627,628],{"class":257},")) ",[109,630,631],{"class":119},"|",[109,633,634],{"class":115}," sudo",[109,636,637],{"class":130}," tee",[109,639,640],{"class":130}," /sys/fs/cgroup/mylimit/memory.max\n",[109,642,643],{"class":111,"line":550},[109,644,645],{"class":419},"# Запустите процесс в этой группе\n",[109,647,648,650,653,656,658,661,664],{"class":111,"line":556},[109,649,604],{"class":115},[109,651,652],{"class":130}," echo",[109,654,655],{"class":126}," $$",[109,657,431],{"class":119},[109,659,660],{"class":130}," /sys/fs/cgroup/mylimit/cgroup.procs",[109,662,663],{"class":257}," && ",[109,665,666],{"class":115},"/путь/к/вашему/приложению\n",[381,668,670],{"id":669},"шаг-3-настройка-параметров-ядра","Шаг 3: Настройка параметров ядра",[21,672,673],{},"Изменение поведения OOM Killer на уровне ядра.",[21,675,676,679,680,683],{},[24,677,678],{},"Вариант A: Запретить переcommit памяти"," (строгий контроль):\nВ ",[51,681,682],{},"/etc/sysctl.conf"," добавьте:",[100,685,689],{"className":686,"code":687,"language":688,"meta":105,"style":105},"language-conf shiki shiki-themes github-light github-dark","vm.overcommit_memory = 2\nvm.overcommit_ratio = 100  # разрешить commit только до 100% RAM+swap\n","conf",[51,690,691,696],{"__ignoreMap":105},[109,692,693],{"class":111,"line":112},[109,694,695],{},"vm.overcommit_memory = 2\n",[109,697,698],{"class":111,"line":297},[109,699,700],{},"vm.overcommit_ratio = 100  # разрешить commit только до 100% RAM+swap\n",[21,702,703,704,707,708,711],{},"Примените: ",[51,705,706],{},"sudo sysctl -p",". Это предотвратит выделение памяти, которой физически нет, но может вызвать ошибки ",[51,709,710],{},"fork: Cannot allocate memory"," у приложений.",[21,713,714,717],{},[24,715,716],{},"Вариант B: Режим паники вместо убийства"," (для отладки):",[100,719,721],{"className":686,"code":720,"language":688,"meta":105,"style":105},"vm.panic_on_oom = 2\n",[51,722,723],{"__ignoreMap":105},[109,724,725],{"class":111,"line":112},[109,726,720],{},[21,728,729],{},"При нехватке памяти система упадёт в kernel panic, что полезно для сбора дампов, но неприемлемо для продакшена.",[21,731,732,735],{},[24,733,734],{},"Вариант C: Изменить степень агрессивности OOM Killer"," (редко используется):",[100,737,739],{"className":686,"code":738,"language":688,"meta":105,"style":105},"vm.oom_kill_allocating_task = 1  # убивать процесс, который выделил память, а не случайный\n",[51,740,741],{"__ignoreMap":105},[109,742,743],{"class":111,"line":112},[109,744,738],{},[381,746,748],{"id":747},"шаг-4-оптимизация-приложения-или-увеличение-ресурсов","Шаг 4: Оптимизация приложения или увеличение ресурсов",[21,750,751],{},"Если проблема вызвана утечкой памяти:",[32,753,754,766,776],{},[35,755,756,757,175,760,175,763,372],{},"Используйте профилировщики: ",[51,758,759],{},"valgrind --leak-check=full",[51,761,762],{},"heaptrack",[51,764,765],{},"perf",[35,767,768,769,182,772,775],{},"Для Java-приложений: настройте ",[51,770,771],{},"-Xmx",[51,773,774],{},"-Xms"," в JVM.",[35,777,778,779,239],{},"Для Python: проверьте на утечки (например, через ",[51,780,781],{},"tracemalloc",[21,783,784],{},"Если нагрузка обоснована:",[32,786,787,790],{},[35,788,789],{},"Увеличьте объём RAM на сервере.",[35,791,792,793],{},"Добавьте swap-файл (временное решение, но не панацея):\n",[100,794,796],{"className":102,"code":795,"language":104,"meta":105,"style":105},"sudo fallocate -l 4G /swapfile\nsudo chmod 600 /swapfile\nsudo mkswap /swapfile\nsudo swapon /swapfile\n",[51,797,798,814,826,835],{"__ignoreMap":105},[109,799,800,802,805,808,811],{"class":111,"line":112},[109,801,604],{"class":115},[109,803,804],{"class":130}," fallocate",[109,806,807],{"class":126}," -l",[109,809,810],{"class":130}," 4G",[109,812,813],{"class":130}," /swapfile\n",[109,815,816,818,821,824],{"class":111,"line":297},[109,817,604],{"class":115},[109,819,820],{"class":130}," chmod",[109,822,823],{"class":126}," 600",[109,825,813],{"class":130},[109,827,828,830,833],{"class":111,"line":343},[109,829,604],{"class":115},[109,831,832],{"class":130}," mkswap",[109,834,813],{"class":130},[109,836,837,839,842],{"class":111,"line":544},[109,838,604],{"class":115},[109,840,841],{"class":130}," swapon",[109,843,813],{"class":130},[16,845,847],{"id":846},"профилактика-oom-killer","Профилактика OOM Killer",[91,849,850,876,917],{},[35,851,852,98,855],{},[24,853,854],{},"Мониторинг памяти",[32,856,857,867,870],{},[35,858,859,860,863,864,372],{},"Используйте ",[51,861,862],{},"Prometheus + node_exporter"," или ",[51,865,866],{},"Zabbix",[35,868,869],{},"Настройте алерты при использовании RAM > 80%.",[35,871,872,873,372],{},"Пример команды для быстрой проверки: ",[51,874,875],{},"awk '/MemAvailable/ {print $2/1024\" GB available\"}' /proc/meminfo",[35,877,878,98,881],{},[24,879,880],{},"Логирование использования памяти",[100,882,884],{"className":102,"code":883,"language":104,"meta":105,"style":105},"# Запись каждые 5 минут в cron\n*/5 * * * * /usr/bin/free -h >> /var/log/memory.log\n",[51,885,886,891],{"__ignoreMap":105},[109,887,888],{"class":111,"line":112},[109,889,890],{"class":419},"# Запись каждые 5 минут в cron\n",[109,892,893,896,899,901,904,906,908,911,914],{"class":111,"line":297},[109,894,895],{"class":119},"*",[109,897,898],{"class":257},"/5 ",[109,900,895],{"class":119},[109,902,903],{"class":119}," *",[109,905,903],{"class":119},[109,907,903],{"class":119},[109,909,910],{"class":257}," /usr/bin/free -h ",[109,912,913],{"class":119},">>",[109,915,916],{"class":257}," /var/log/memory.log\n",[35,918,919,98,922],{},[24,920,921],{},"Регулярный аудит процессов",[32,923,924,929],{},[35,925,926,927,372],{},"Ищите процессы с аномально высоким ",[51,928,64],{},[35,930,931],{},"Проверяйте контейнеры на соответствие лимитам.",[16,933,935],{"id":934},"особенности-в-контейнерах-dockerkubernetes","Особенности в контейнерах (Docker/Kubernetes)",[21,937,938],{},"В контейнерах OOM Killer работает внутри изоляции cgroups, но если контейнер исчерпает свой лимит, ядро убьёт процесс внутри него.",[21,940,941,98],{},[24,942,943],{},"Docker",[100,945,947],{"className":102,"code":946,"language":104,"meta":105,"style":105},"# Запуск с лимитом 512 МБ RAM и 1 ГБ swap\ndocker run -d --memory=512m --memory-swap=1g ваш-образ\n\n# Проверка лимитов\ndocker stats\n",[51,948,949,954,974,978,983],{"__ignoreMap":105},[109,950,951],{"class":111,"line":112},[109,952,953],{"class":419},"# Запуск с лимитом 512 МБ RAM и 1 ГБ swap\n",[109,955,956,959,962,965,968,971],{"class":111,"line":297},[109,957,958],{"class":115},"docker",[109,960,961],{"class":130}," run",[109,963,964],{"class":126}," -d",[109,966,967],{"class":126}," --memory=512m",[109,969,970],{"class":126}," --memory-swap=1g",[109,972,973],{"class":130}," ваш-образ\n",[109,975,976],{"class":111,"line":343},[109,977,541],{"emptyLinePlaceholder":540},[109,979,980],{"class":111,"line":544},[109,981,982],{"class":419},"# Проверка лимитов\n",[109,984,985,987],{"class":111,"line":550},[109,986,958],{"class":115},[109,988,989],{"class":130}," stats\n",[21,991,992,98],{},[24,993,994],{},"Kubernetes",[100,996,1000],{"className":997,"code":998,"language":999,"meta":105,"style":105},"language-yaml shiki shiki-themes github-light github-dark","resources:\n  limits:\n    memory: \"512Mi\"\n    cpu: \"500m\"\n  requests:\n    memory: \"256Mi\"\n","yaml",[51,1001,1002,1011,1018,1029,1039,1046],{"__ignoreMap":105},[109,1003,1004,1008],{"class":111,"line":112},[109,1005,1007],{"class":1006},"s9eBZ","resources",[109,1009,1010],{"class":257},":\n",[109,1012,1013,1016],{"class":111,"line":297},[109,1014,1015],{"class":1006},"  limits",[109,1017,1010],{"class":257},[109,1019,1020,1023,1026],{"class":111,"line":343},[109,1021,1022],{"class":1006},"    memory",[109,1024,1025],{"class":257},": ",[109,1027,1028],{"class":130},"\"512Mi\"\n",[109,1030,1031,1034,1036],{"class":111,"line":544},[109,1032,1033],{"class":1006},"    cpu",[109,1035,1025],{"class":257},[109,1037,1038],{"class":130},"\"500m\"\n",[109,1040,1041,1044],{"class":111,"line":550},[109,1042,1043],{"class":1006},"  requests",[109,1045,1010],{"class":257},[109,1047,1048,1050,1052],{"class":111,"line":556},[109,1049,1022],{"class":1006},[109,1051,1025],{"class":257},[109,1053,1054],{"class":130},"\"256Mi\"\n",[21,1056,1057,1058,182,1061,1064],{},"Убедитесь, что ",[51,1059,1060],{},"requests",[51,1062,1063],{},"limits"," установлены адекватно. При превышении лимита поды будет убит (OOMKilled).",[16,1066,1068],{"id":1067},"частые-ошибки-при-настройке","Частые ошибки при настройке",[32,1070,1071,1079,1085,1095],{},[35,1072,1073,1078],{},[24,1074,1075,1076],{},"Защита всех процессов через ",[51,1077,491],{},": Это отключает OOM Killer полностью, что может привести к полной блокировке системы при нехватке памяти.",[35,1080,1081,1084],{},[24,1082,1083],{},"Установка слишком высоких лимитов cgroups",": Если лимит выше, чем физическая RAM, OOM Killer всё равно сработает на уровне хоста.",[35,1086,1087,1090,1091,1094],{},[24,1088,1089],{},"Игнорирование swap",": Swap замедляет систему, но может дать время на реакцию. Полный отказ от swap (",[51,1092,1093],{},"swapoff -a",") ускорит срабатывание OOM Killer.",[35,1096,1097,1100,1101,1103,1104,1107,1108,1110],{},[24,1098,1099],{},"Неправильное толкование логов",": Сообщение ",[51,1102,53],{}," может быть и от ручного ",[51,1105,1106],{},"kill -9",". Всегда проверяйте ",[51,1109,116],{}," и код выхода процесса (137 = SIGKILL, часто от OOM).",[16,1112,1114],{"id":1113},"что-дальше","Что дальше?",[21,1116,1117],{},"После применения мер проверьте:",[91,1119,1120,1127,1130],{},[35,1121,1122,1123,1126],{},"Стабильность работы под нагрузкой (тесты с ",[51,1124,1125],{},"stress-ng"," или реальной нагрузкой).",[35,1128,1129],{},"Логи на отсутствие новых записей OOM Killer.",[35,1131,1132],{},"Корректность работы защищённых процессов (не потребляют ли они слишком много памяти в ущерб другим).",[21,1134,1135],{},"Если проблема остаётся, рассмотрите архитектурные изменения: шардирование, кэширование, использование более эффективных алгоритмов обработки данных.",[21,1137,1138,1141],{},[24,1139,1140],{},"Запомните",": OOM Killer — это последний рубеж защиты системы. Лучшая стратегия — не допускать ситуаций, когда он срабатывает, через мониторинг и грамотное планирование ресурсов.",[1143,1144,1145],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":105,"searchDepth":297,"depth":297,"links":1147},[1148,1149,1150,1151,1158,1159,1160,1161],{"id":18,"depth":297,"text":19},{"id":57,"depth":297,"text":58},{"id":85,"depth":297,"text":86},{"id":378,"depth":297,"text":379,"children":1152},[1153,1155,1156,1157],{"id":383,"depth":343,"text":1154},"Шаг 1: Настройка oom_score_adj для защиты ключевых процессов",{"id":495,"depth":343,"text":496},{"id":669,"depth":343,"text":670},{"id":747,"depth":343,"text":748},{"id":846,"depth":297,"text":847},{"id":934,"depth":297,"text":935},{"id":1067,"depth":297,"text":1068},{"id":1113,"depth":297,"text":1114},null,"2026-02-14 11:52:27","Подробное руководство по работе OOM Killer в Linux. Узнайте, как анализировать логи, настроить параметры ядра и предотвратить завершение процессов из-за нехватки памяти. Пошаговые инструкции для администраторов.","medium",false,"15-30 мин","md",[1170,1173,1176,1179],{"answer":1171,"question":1172},"OOM Killer работает на основе очков (`oom_score`), которые вычисляются исходя из использования памяти и других факторов. Если процесс потребляет много RAM, даже будучи системным, он может быть убит. Настройка `oom_score_adj` помогает защитить критические процессы.","Почему OOM Killer убивает важные системные процессы?",{"answer":1174,"question":1175},"Можно установить `vm.panic_on_oom=2` в `/etc/sysctl.conf` и применить `sysctl -p`. При нехватке памяти система вместо убийства процессов упадёт в панику (kernel panic), что полезно для отладки, но не для продакшена.","Как временно отключить OOM Killer?",{"answer":1177,"question":1178},"Для процесса с PID `\u003CPID>` запишите отрицательное значение (например, `-1000`) в `/proc/\u003CPID>/oom_score_adj`. Это значительно снизит его `oom_score` и вероятность убийства. Для постоянной защиты настройте через systemd или скрипт.","Как защитить конкретный процесс от OOM Killer?",{"answer":1180,"question":1181},"Да, но контейнеры изолированы через cgroups. OOM Killer убивает процессы внутри контейнера, если контейнер исчерпал свой лимит памяти. Настройте `--memory` и `--memory-swap` при запуске контейнера, а также `oom_score_adj` внутри него.","OOM Killer работает внутри Docker-контейнеров?",[1183,1186,1189,1192,1195,1198],{"name":1184,"text":1185},"Анализ логов ядра на наличие записей OOM Killer","Используйте команду `dmesg | grep -i kill` или просмотрите `/var/log/syslog` на наличие строк с \\Out of memory\\ и \\Killed process\\. Запишите имя процесса и его PID.",{"name":1187,"text":1188},"Проверка текущего использования памяти","Выполните `free -h` для общего обзора памяти и swap. Используйте `top` или `htop` для сортировки процессов по использованию RAM (клавиша `M` в htop).",{"name":1190,"text":1191},"Настройка oom_score_adj для защиты процесса","Для процесса с PID `\u003CPID>` выполните `echo -1000 > /proc/\u003CPID>/oom_score_adj`. Это значение от -1000 до +1000, где -1000 максимально защищает процесс. Для перманентной настройки используйте systemd-юнит с `OOMScoreAdjust=-1000`.",{"name":1193,"text":1194},"Использование cgroups для ограничения памяти","Создайте cgroup через systemd: `systemd-run --scope -p MemoryMax=500M ваша_команда`. Или вручную: `mkdir /sys/fs/cgroup/mylimit && echo 500M > /sys/fs/cgroup/mylimit/memory.max` и запустите процесс в этой группе.",{"name":1196,"text":1197},"Настройка параметров ядра","Отредактируйте `/etc/sysctl.conf` и добавьте строки: `vm.panic_on_oom=2` (паника вместо убийства) или `vm.overcommit_memory=2` (запрет переcommit'а памяти). Примените `sysctl -p`.",{"name":1199,"text":1200},"Оптимизация приложения или увеличение RAM","Если проблема хроническая, проанализируйте утечки памяти в приложении (например, через `valgrind`). На сервере без возможности оптимизации рассмотрите апгрейд оперативной памяти.","PT30M",[1203,1204,1205,1206,387,1207,1208,1209,1210,1211],"oom killer linux","killed process linux","нехватка памяти linux","как отключить oom killer","linux out of memory","убийство процессов ядром","cgroups memory limit","dmesg oom killer","vm.overcommit_memory","ru_RU",{},"/errors/linux/oom-killer","linux",[1217,1218,1219],"/errors/linux/out-of-memory","/guides/linux/monitor-memory-usage","/guides/linux/systemd-cgroups","Ошибки Linux",{"title":5,"description":1164},"high","errors/linux/oom-killer","Этот гайд объясняет механизм OOM Killer в Linux и предоставляет практические шаги по диагностике и предотвращению завершения процессов из-за нехватки памяти. Вы научитесь анализировать логи, настраивать приоритеты процессов и управлять памятью с помощью cgroups.",[1226,1227,1228,1229,1230,1231],"linux errors","oom killer","memory management","администрирование","kernel","cgroups","guide","yLKZsBBOdw0WxB2klhnj1kgSj9b0cNfsSTCuvycB6Aw",{"data":1235,"body":1236},{},{"type":1237,"children":1238},"root",[1239],{"type":1240,"tag":21,"props":1241,"children":1242},"element",{},[1243,1245,1250,1252,1257],{"type":141,"value":1244},"OOM Killer работает на основе очков (",{"type":1240,"tag":51,"props":1246,"children":1248},{"className":1247},[],[1249],{"type":141,"value":64},{"type":141,"value":1251},"), которые вычисляются исходя из использования памяти и других факторов. Если процесс потребляет много RAM, даже будучи системным, он может быть убит. Настройка ",{"type":1240,"tag":51,"props":1253,"children":1255},{"className":1254},[],[1256],{"type":141,"value":387},{"type":141,"value":1258}," помогает защитить критические процессы.",{"data":1260,"body":1261},{},{"type":1237,"children":1262},[1263],{"type":1240,"tag":21,"props":1264,"children":1265},{},[1266,1268,1274,1276,1281,1283,1289],{"type":141,"value":1267},"Можно установить ",{"type":1240,"tag":51,"props":1269,"children":1271},{"className":1270},[],[1272],{"type":141,"value":1273},"vm.panic_on_oom=2",{"type":141,"value":1275}," в ",{"type":1240,"tag":51,"props":1277,"children":1279},{"className":1278},[],[1280],{"type":141,"value":682},{"type":141,"value":1282}," и применить ",{"type":1240,"tag":51,"props":1284,"children":1286},{"className":1285},[],[1287],{"type":141,"value":1288},"sysctl -p",{"type":141,"value":1290},". При нехватке памяти система вместо убийства процессов упадёт в панику (kernel panic), что полезно для отладки, но не для продакшена.",{"data":1292,"body":1293},{},{"type":1237,"children":1294},[1295],{"type":1240,"tag":21,"props":1296,"children":1297},{},[1298,1300,1306,1308,1313,1315,1321,1323,1328],{"type":141,"value":1299},"Для процесса с PID ",{"type":1240,"tag":51,"props":1301,"children":1303},{"className":1302},[],[1304],{"type":141,"value":1305},"\u003CPID>",{"type":141,"value":1307}," запишите отрицательное значение (например, ",{"type":1240,"tag":51,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":141,"value":398},{"type":141,"value":1314},") в ",{"type":1240,"tag":51,"props":1316,"children":1318},{"className":1317},[],[1319],{"type":141,"value":1320},"/proc/\u003CPID>/oom_score_adj",{"type":141,"value":1322},". Это значительно снизит его ",{"type":1240,"tag":51,"props":1324,"children":1326},{"className":1325},[],[1327],{"type":141,"value":64},{"type":141,"value":1329}," и вероятность убийства. Для постоянной защиты настройте через systemd или скрипт.",{"data":1331,"body":1332},{},{"type":1237,"children":1333},[1334],{"type":1240,"tag":21,"props":1335,"children":1336},{},[1337,1339,1345,1346,1352,1354,1359],{"type":141,"value":1338},"Да, но контейнеры изолированы через cgroups. OOM Killer убивает процессы внутри контейнера, если контейнер исчерпал свой лимит памяти. Настройте ",{"type":1240,"tag":51,"props":1340,"children":1342},{"className":1341},[],[1343],{"type":141,"value":1344},"--memory",{"type":141,"value":182},{"type":1240,"tag":51,"props":1347,"children":1349},{"className":1348},[],[1350],{"type":141,"value":1351},"--memory-swap",{"type":141,"value":1353}," при запуске контейнера, а также ",{"type":1240,"tag":51,"props":1355,"children":1357},{"className":1356},[],[1358],{"type":141,"value":387},{"type":141,"value":1360}," внутри него.",{"data":1362,"body":1363},{},{"type":1237,"children":1364},[1365],{"type":1240,"tag":21,"props":1366,"children":1367},{},[1368,1370,1376,1378,1384],{"type":141,"value":1369},"Используйте команду ",{"type":1240,"tag":51,"props":1371,"children":1373},{"className":1372},[],[1374],{"type":141,"value":1375},"dmesg | grep -i kill",{"type":141,"value":1377}," или просмотрите ",{"type":1240,"tag":51,"props":1379,"children":1381},{"className":1380},[],[1382],{"type":141,"value":1383},"/var/log/syslog",{"type":141,"value":1385}," на наличие строк с \\Out of memory\\ и \\Killed process. Запишите имя процесса и его PID.",{"data":1387,"body":1388},{},{"type":1237,"children":1389},[1390],{"type":1240,"tag":21,"props":1391,"children":1392},{},[1393,1395,1401,1403,1408,1409,1414,1416,1422],{"type":141,"value":1394},"Выполните ",{"type":1240,"tag":51,"props":1396,"children":1398},{"className":1397},[],[1399],{"type":141,"value":1400},"free -h",{"type":141,"value":1402}," для общего обзора памяти и swap. Используйте ",{"type":1240,"tag":51,"props":1404,"children":1406},{"className":1405},[],[1407],{"type":141,"value":207},{"type":141,"value":863},{"type":1240,"tag":51,"props":1410,"children":1412},{"className":1411},[],[1413],{"type":141,"value":230},{"type":141,"value":1415}," для сортировки процессов по использованию RAM (клавиша ",{"type":1240,"tag":51,"props":1417,"children":1419},{"className":1418},[],[1420],{"type":141,"value":1421},"M",{"type":141,"value":1423}," в htop).",{"data":1425,"body":1426},{},{"type":1237,"children":1427},[1428],{"type":1240,"tag":21,"props":1429,"children":1430},{},[1431,1432,1437,1439,1445,1447,1453],{"type":141,"value":1299},{"type":1240,"tag":51,"props":1433,"children":1435},{"className":1434},[],[1436],{"type":141,"value":1305},{"type":141,"value":1438}," выполните ",{"type":1240,"tag":51,"props":1440,"children":1442},{"className":1441},[],[1443],{"type":141,"value":1444},"echo -1000 > /proc/\u003CPID>/oom_score_adj",{"type":141,"value":1446},". Это значение от -1000 до +1000, где -1000 максимально защищает процесс. Для перманентной настройки используйте systemd-юнит с ",{"type":1240,"tag":51,"props":1448,"children":1450},{"className":1449},[],[1451],{"type":141,"value":1452},"OOMScoreAdjust=-1000",{"type":141,"value":372},{"data":1455,"body":1456},{},{"type":1237,"children":1457},[1458],{"type":1240,"tag":21,"props":1459,"children":1460},{},[1461,1463,1469,1471,1477],{"type":141,"value":1462},"Создайте cgroup через systemd: ",{"type":1240,"tag":51,"props":1464,"children":1466},{"className":1465},[],[1467],{"type":141,"value":1468},"systemd-run --scope -p MemoryMax=500M ваша_команда",{"type":141,"value":1470},". Или вручную: ",{"type":1240,"tag":51,"props":1472,"children":1474},{"className":1473},[],[1475],{"type":141,"value":1476},"mkdir /sys/fs/cgroup/mylimit && echo 500M > /sys/fs/cgroup/mylimit/memory.max",{"type":141,"value":1478}," и запустите процесс в этой группе.",{"data":1480,"body":1481},{},{"type":1237,"children":1482},[1483],{"type":1240,"tag":21,"props":1484,"children":1485},{},[1486,1488,1493,1495,1500,1502,1508,1510,1515],{"type":141,"value":1487},"Отредактируйте ",{"type":1240,"tag":51,"props":1489,"children":1491},{"className":1490},[],[1492],{"type":141,"value":682},{"type":141,"value":1494}," и добавьте строки: ",{"type":1240,"tag":51,"props":1496,"children":1498},{"className":1497},[],[1499],{"type":141,"value":1273},{"type":141,"value":1501}," (паника вместо убийства) или ",{"type":1240,"tag":51,"props":1503,"children":1505},{"className":1504},[],[1506],{"type":141,"value":1507},"vm.overcommit_memory=2",{"type":141,"value":1509}," (запрет переcommit'а памяти). Примените ",{"type":1240,"tag":51,"props":1511,"children":1513},{"className":1512},[],[1514],{"type":141,"value":1288},{"type":141,"value":372},{"data":1517,"body":1518},{},{"type":1237,"children":1519},[1520],{"type":1240,"tag":21,"props":1521,"children":1522},{},[1523,1525,1531],{"type":141,"value":1524},"Если проблема хроническая, проанализируйте утечки памяти в приложении (например, через ",{"type":1240,"tag":51,"props":1526,"children":1528},{"className":1527},[],[1529],{"type":141,"value":1530},"valgrind",{"type":141,"value":1532},"). На сервере без возможности оптимизации рассмотрите апгрейд оперативной памяти.",[1534,2442,3661],{"id":1535,"title":1536,"appliesTo":1537,"author":11,"body":1540,"canonical":1162,"code":2389,"createdAt":2390,"description":2391,"difficulty":1165,"draft":1166,"estimatedTime":1167,"extension":1168,"faq":2392,"howToSteps":2405,"howToTotalTime":2421,"image":1162,"keywords":2422,"locale":1212,"meta":2430,"navigation":540,"path":1217,"platform":1215,"related":2431,"section":1220,"seo":2434,"severity":1222,"stem":2435,"summary":2436,"tags":2437,"twitterCreator":1162,"twitterSite":1162,"type":2440,"updatedAt":2390,"__hash__":2441},"content_ru/errors/linux/out-of-memory.md","OOM Killer в Linux: причины и способы решения ошибки нехватки памяти",[1538,1539],"Linux ядра 3.x и выше","Все дистрибутивы (Ubuntu, CentOS, Debian, RHEL)",{"type":13,"value":1541,"toc":2377},[1542,1546,1557,1563,1569,1576,1580,1612,1616,1620,1623,1718,1722,1725,1853,1862,1866,1869,1874,1877,1902,1905,1919,1931,1962,1966,1972,1994,2004,2033,2038,2042,2051,2197,2201,2211,2301,2303,2307,2374],[16,1543,1545],{"id":1544},"что-означает-ошибка-oom","Что означает ошибка OOM",[21,1547,1548,1551,1552,1556],{},[24,1549,1550],{},"OOM Killer"," (Out-of-Memory Killer) — это механизм ядра Linux, который автоматически завершает один или несколько процессов, когда система исчерпала доступную оперативную память (RAM) и swap-пространство. Это не ошибка приложения, а ",[1553,1554,1555],"em",{},"реакция ядра"," на критическую нехватку памяти, чтобы избежать полного зависания системы.",[21,1558,1559,1560,1562],{},"Типичный вывод в логах (",[51,1561,116],{},"):",[100,1564,1567],{"className":1565,"code":1566,"language":141},[139],"[12345.678901] Out of memory: Kill process 1234 (some-process) score 999 or sacrifice child\n[12345.678912] Killed process 1234 (some-process) total-vm:123456kB, anon-rss:98765kB, file-rss:1234kB\n",[51,1568,1566],{"__ignoreMap":105},[21,1570,1571,1572,1575],{},"Симптомы у пользователя: неожиданное падение сервисов (например, PostgreSQL, Java-приложение, веб-сервер), сообщения ",[51,1573,1574],{},"Killed"," в терминале при запуске программ, невозможность создать новые процессы.",[16,1577,1579],{"id":1578},"причины-возникновения","Причины возникновения",[91,1581,1582,1588,1594,1600,1606],{},[35,1583,1584,1587],{},[24,1585,1586],{},"Физическая нехватка RAM + swap",". Запущенные процессы потребляют больше памяти, чем доступно физически + в swap. Часто происходит из-за утечек памяти (memory leaks) в долгоживущих приложениях.",[35,1589,1590,1593],{},[24,1591,1592],{},"Агрессивный overcommit",". Ядро Linux по умолчанию разрешает выделение памяти, которой физически нет (overcommit), полагаясь на то, что приложения её не используют полностью. Если же все процессы решат использовать зарезервированное — OOM Killer сработает.",[35,1595,1596,1599],{},[24,1597,1598],{},"Конфигурация swap слишком мала или отсутствует",". На системах без swap или с минимальным swap (например, 1-2 ГБ) OOM Killer срабатывает при меньшей нагрузке, так как нет буфера для выгрузки неактивных страниц.",[35,1601,1602,1605],{},[24,1603,1604],{},"Злонамеренный или buggy процесс",". Процесс может намеренно выделять память (например, fork-бомба) или содержать баг, приводящий к бесконечному росту потребления памяти.",[35,1607,1608,1611],{},[24,1609,1610],{},"Недостаток cgroup-лимитов",". В контейнерах (Docker) или виртуальных средах, где память ограничена через cgroups, OOM Killer может убить процесс внутри контейнера, даже если на хосте ещё есть свободная память.",[16,1613,1615],{"id":1614},"способы-решения","Способы решения",[381,1617,1619],{"id":1618},"способ-1-быстрая-диагностика-и-освобождение-памяти","Способ 1: Быстрая диагностика и освобождение памяти",[21,1621,1622],{},"Первым делом определите, какой процесс виновник и сколько памяти свободно.",[91,1624,1625,1644,1671,1682],{},[35,1626,1627,1628,1638,1640,1641,1643],{},"Проверьте общую статистику:",[100,1629,1630],{"className":102,"code":158,"language":104,"meta":105,"style":105},[51,1631,1632],{"__ignoreMap":105},[109,1633,1634,1636],{"class":111,"line":112},[109,1635,165],{"class":115},[109,1637,168],{"class":126},[133,1639],{},"Обратите внимание на строку ",[51,1642,181],{}," — это реально доступная память для новых процессов. Если значение близко к нулю — проблема серьёзная.",[35,1645,1646,1647,1668,1670],{},"Найдите \"тяжёлых\" процессов:",[100,1648,1650],{"className":102,"code":1649,"language":104,"meta":105,"style":105},"ps aux --sort=-%mem | head -10\n",[51,1651,1652],{"__ignoreMap":105},[109,1653,1654,1656,1659,1662,1664,1666],{"class":111,"line":112},[109,1655,267],{"class":115},[109,1657,1658],{"class":130}," aux",[109,1660,1661],{"class":126}," --sort=-%mem",[109,1663,120],{"class":119},[109,1665,221],{"class":115},[109,1667,366],{"class":126},[133,1669],{},"Это покажет топ-10 процессов по потреблению RAM.",[35,1672,1673,1674,1677,1678,1681],{},"Проверьте, нет ли процессов с аномально высоким ",[51,1675,1676],{},"VIRT"," (виртуальная память), но низким ",[51,1679,1680],{},"RES"," (физическая) — возможна overcommit-атака.",[35,1683,1684,1687,1688,1713,1715],{},[24,1685,1686],{},"Если система ещё реагирует",", попробуйте вручную завершить не критичный процесс с высоким потреблением:",[100,1689,1691],{"className":102,"code":1690,"language":104,"meta":105,"style":105},"sudo kill -9 \u003CPID>\n",[51,1692,1693],{"__ignoreMap":105},[109,1694,1695,1697,1700,1703,1706,1708,1710],{"class":111,"line":112},[109,1696,604],{"class":115},[109,1698,1699],{"class":130}," kill",[109,1701,1702],{"class":126}," -9",[109,1704,1705],{"class":119}," \u003C",[109,1707,439],{"class":130},[109,1709,442],{"class":257},[109,1711,1712],{"class":119},">\n",[133,1714],{},[1553,1716,1717],{},"Используйте с осторожностью, только если уверены в природе процесса.",[381,1719,1721],{"id":1720},"способ-2-добавление-или-увеличение-swap-файла","Способ 2: Добавление или увеличение swap-файла",[21,1723,1724],{},"Если у вас мало swap (например, менее размера RAM), создайте дополнительный swap-файл. Это даст ядру больше \"воздуха\".",[91,1726,1727,1759,1785,1801,1831],{},[35,1728,1729,1730,1747,1749],{},"Создайте файл размером 4 ГБ (подберите размер под нагрузку):",[100,1731,1733],{"className":102,"code":1732,"language":104,"meta":105,"style":105},"sudo fallocate -l 4G /swapfile\n",[51,1734,1735],{"__ignoreMap":105},[109,1736,1737,1739,1741,1743,1745],{"class":111,"line":112},[109,1738,604],{"class":115},[109,1740,804],{"class":130},[109,1742,807],{"class":126},[109,1744,810],{"class":130},[109,1746,813],{"class":130},[133,1748],{},[1553,1750,1751,1752,1755,1756,372],{},"Если ",[51,1753,1754],{},"fallocate"," недоступен, используйте ",[51,1757,1758],{},"dd if=/dev/zero of=/swapfile bs=1M count=4096",[35,1760,1761,1762],{},"Установите правильные права и подготовьте как swap:",[100,1763,1765],{"className":102,"code":1764,"language":104,"meta":105,"style":105},"sudo chmod 600 /swapfile\nsudo mkswap /swapfile\n",[51,1766,1767,1777],{"__ignoreMap":105},[109,1768,1769,1771,1773,1775],{"class":111,"line":112},[109,1770,604],{"class":115},[109,1772,820],{"class":130},[109,1774,823],{"class":126},[109,1776,813],{"class":130},[109,1778,1779,1781,1783],{"class":111,"line":297},[109,1780,604],{"class":115},[109,1782,832],{"class":130},[109,1784,813],{"class":130},[35,1786,1787,1788],{},"Активируйте swap:",[100,1789,1791],{"className":102,"code":1790,"language":104,"meta":105,"style":105},"sudo swapon /swapfile\n",[51,1792,1793],{"__ignoreMap":105},[109,1794,1795,1797,1799],{"class":111,"line":112},[109,1796,604],{"class":115},[109,1798,841],{"class":130},[109,1800,813],{"class":130},[35,1802,1803,1804,98,1807],{},"Чтобы swap включался автоматически при загрузке, добавьте строку в ",[51,1805,1806],{},"/etc/fstab",[100,1808,1810],{"className":102,"code":1809,"language":104,"meta":105,"style":105},"echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab\n",[51,1811,1812],{"__ignoreMap":105},[109,1813,1814,1816,1819,1821,1823,1825,1828],{"class":111,"line":112},[109,1815,425],{"class":126},[109,1817,1818],{"class":130}," '/swapfile none swap sw 0 0'",[109,1820,120],{"class":119},[109,1822,634],{"class":115},[109,1824,637],{"class":130},[109,1826,1827],{"class":126}," -a",[109,1829,1830],{"class":130}," /etc/fstab\n",[35,1832,1833,1834],{},"Проверьте:",[100,1835,1837],{"className":102,"code":1836,"language":104,"meta":105,"style":105},"swapon --show\nfree -h\n",[51,1838,1839,1847],{"__ignoreMap":105},[109,1840,1841,1844],{"class":111,"line":112},[109,1842,1843],{"class":115},"swapon",[109,1845,1846],{"class":126}," --show\n",[109,1848,1849,1851],{"class":111,"line":297},[109,1850,165],{"class":115},[109,1852,168],{"class":126},[1854,1855,1856],"blockquote",{},[21,1857,1858,1859,1861],{},"⚠️ ",[24,1860,487],{},": Swap на SSD ускорит работу, но увеличит износ. Для серверов с большим RAM (16+ ГБ) swap может быть минимальным (2-4 ГБ) или отключённым, но тогда OOM Killer сработает быстрее.",[381,1863,1865],{"id":1864},"способ-3-настройка-oom-политики-для-конкретных-процессов","Способ 3: Настройка OOM-политики для конкретных процессов",[21,1867,1868],{},"Иногда нужно защитить критичный сервис (например, базу данных) от убийства, пожертвовав менее важным.",[1870,1871,1873],"h4",{"id":1872},"для-системd-сервисов-современные-дистрибутивы","Для системd-сервисов (современные дистрибутивы)",[21,1875,1876],{},"Создайте override-конфигурацию для сервиса:",[100,1878,1880],{"className":102,"code":1879,"language":104,"meta":105,"style":105},"sudo systemctl edit \u003Cимя_сервиса>\n",[51,1881,1882],{"__ignoreMap":105},[109,1883,1884,1886,1889,1892,1894,1897,1900],{"class":111,"line":112},[109,1885,604],{"class":115},[109,1887,1888],{"class":130}," systemctl",[109,1890,1891],{"class":130}," edit",[109,1893,1705],{"class":119},[109,1895,1896],{"class":130},"имя_сервис",[109,1898,1899],{"class":257},"а",[109,1901,1712],{"class":119},[21,1903,1904],{},"В открывшемся редакторе добавьте:",[100,1906,1908],{"className":457,"code":1907,"language":459,"meta":105,"style":105},"[Service]\nOOMScoreAdjust=-900\n",[51,1909,1910,1914],{"__ignoreMap":105},[109,1911,1912],{"class":111,"line":112},[109,1913,471],{},[109,1915,1916],{"class":111,"line":297},[109,1917,1918],{},"OOMScoreAdjust=-900\n",[21,1920,1921],{},[1553,1922,1923,1924,1926,1927,1930],{},"Значение ",[51,1925,398],{}," — абсолютная защита (ядро не будет убивать такой процесс даже при тотальном OOM). ",[51,1928,1929],{},"-900"," — очень низкий приоритет на убийство. Сохраните и перезапустите сервис:",[100,1932,1934],{"className":102,"code":1933,"language":104,"meta":105,"style":105},"sudo systemctl daemon-reload\nsudo systemctl restart \u003Cимя_сервиса>\n",[51,1935,1936,1945],{"__ignoreMap":105},[109,1937,1938,1940,1942],{"class":111,"line":112},[109,1939,604],{"class":115},[109,1941,1888],{"class":130},[109,1943,1944],{"class":130}," daemon-reload\n",[109,1946,1947,1949,1951,1954,1956,1958,1960],{"class":111,"line":297},[109,1948,604],{"class":115},[109,1950,1888],{"class":130},[109,1952,1953],{"class":130}," restart",[109,1955,1705],{"class":119},[109,1957,1896],{"class":130},[109,1959,1899],{"class":257},[109,1961,1712],{"class":119},[1870,1963,1965],{"id":1964},"для-ручных-процессов","Для ручных процессов",[21,1967,1968,1969,1971],{},"Запустите процесс с изменённым OOM-скорингом через ",[51,1970,523],{}," (если система использует systemd):",[100,1973,1975],{"className":102,"code":1974,"language":104,"meta":105,"style":105},"systemd-run --scope -p OOMScoreAdjust=-500 ./ваша_программа\n",[51,1976,1977],{"__ignoreMap":105},[109,1978,1979,1981,1983,1985,1988,1991],{"class":111,"line":112},[109,1980,523],{"class":115},[109,1982,526],{"class":126},[109,1984,529],{"class":126},[109,1986,1987],{"class":130}," OOMScoreAdjust=",[109,1989,1990],{"class":126},"-500",[109,1992,1993],{"class":130}," ./ваша_программа\n",[21,1995,1996,1997,2000,2001,2003],{},"Или через ",[51,1998,1999],{},"prctl"," в коде (для разработчиков). Для уже запущенного процесса изменить ",[51,2002,387],{}," можно:",[100,2005,2007],{"className":102,"code":2006,"language":104,"meta":105,"style":105},"echo -1000 | sudo tee /proc/\u003CPID>/oom_score_adj\n",[51,2008,2009],{"__ignoreMap":105},[109,2010,2011,2013,2015,2017,2019,2021,2023,2025,2027,2029,2031],{"class":111,"line":112},[109,2012,425],{"class":126},[109,2014,428],{"class":126},[109,2016,120],{"class":119},[109,2018,634],{"class":115},[109,2020,637],{"class":130},[109,2022,315],{"class":130},[109,2024,436],{"class":119},[109,2026,439],{"class":130},[109,2028,442],{"class":257},[109,2030,445],{"class":119},[109,2032,448],{"class":130},[21,2034,2035],{},[1553,2036,2037],{},"Требует прав root, изменение временное (до перезапуска процесса).",[381,2039,2041],{"id":2040},"способ-4-тюнинг-ядра-overcommit-и-watermark","Способ 4: Тюнинг ядра — overcommit и watermark",[21,2043,2044,2045,2047,2048,372],{},"Эти настройки глобальные и требуют понимания. Редактируйте ",[51,2046,682],{}," или создайте файл в ",[51,2049,2050],{},"/etc/sysctl.d/",[91,2052,2053,2121,2154],{},[35,2054,2055,2058,2059,2062,2063,2066,2067,2070,2071,2109,2111],{},[24,2056,2057],{},"Уменьшите агрессивность overcommit"," (по умолчанию ",[51,2060,2061],{},"0"," — heuristic overcommit, ",[51,2064,2065],{},"1"," — всегда overcommit, ",[51,2068,2069],{},"2"," — строгий режим):",[100,2072,2074],{"className":102,"code":2073,"language":104,"meta":105,"style":105},"sudo sysctl -w vm.overcommit_memory=2\nsudo sysctl -w vm.overcommit_ratio=80  # Разрешить выделять не более 80% RAM+swap\n",[51,2075,2076,2092],{"__ignoreMap":105},[109,2077,2078,2080,2083,2086,2089],{"class":111,"line":112},[109,2079,604],{"class":115},[109,2081,2082],{"class":130}," sysctl",[109,2084,2085],{"class":126}," -w",[109,2087,2088],{"class":130}," vm.overcommit_memory=",[109,2090,2091],{"class":126},"2\n",[109,2093,2094,2096,2098,2100,2103,2106],{"class":111,"line":297},[109,2095,604],{"class":115},[109,2097,2082],{"class":130},[109,2099,2085],{"class":126},[109,2101,2102],{"class":130}," vm.overcommit_ratio=",[109,2104,2105],{"class":126},"80",[109,2107,2108],{"class":419},"  # Разрешить выделять не более 80% RAM+swap\n",[133,2110],{},[1553,2112,2113,2114,2116,2117,2120],{},"В режиме ",[51,2115,2069],{}," ядро будет отклонять запросы на ",[51,2118,2119],{},"malloc()",", если не хватит памяти, что предотвратит OOM, но может сломать некоторые приложения, ожидающие overcommit.",[35,2122,2123,2126,2127,2149,2151],{},[24,2124,2125],{},"Настройте watermark'ы"," — пороги, при которых ядро начинает активный OOM Killer:",[100,2128,2130],{"className":102,"code":2129,"language":104,"meta":105,"style":105},"sudo sysctl -w vm.min_free_kbytes=65536  # Минимальный резерв свободной памяти (в КБ). Увеличьте, если OOM срабатывает при наличии памяти.\n",[51,2131,2132],{"__ignoreMap":105},[109,2133,2134,2136,2138,2140,2143,2146],{"class":111,"line":112},[109,2135,604],{"class":115},[109,2137,2082],{"class":130},[109,2139,2085],{"class":126},[109,2141,2142],{"class":130}," vm.min_free_kbytes=",[109,2144,2145],{"class":126},"65536",[109,2147,2148],{"class":419},"  # Минимальный резерв свободной памяти (в КБ). Увеличьте, если OOM срабатывает при наличии памяти.\n",[133,2150],{},[1553,2152,2153],{},"Будьте осторожны: слишком высокое значение может привести к неэффективному использованию памяти.",[35,2155,2156,2157],{},"Внесите изменения постоянно:",[100,2158,2160],{"className":102,"code":2159,"language":104,"meta":105,"style":105},"echo \"vm.overcommit_memory=2\" | sudo tee -a /etc/sysctl.conf\necho \"vm.overcommit_ratio=80\" | sudo tee -a /etc/sysctl.conf\n",[51,2161,2162,2180],{"__ignoreMap":105},[109,2163,2164,2166,2169,2171,2173,2175,2177],{"class":111,"line":112},[109,2165,425],{"class":126},[109,2167,2168],{"class":130}," \"vm.overcommit_memory=2\"",[109,2170,120],{"class":119},[109,2172,634],{"class":115},[109,2174,637],{"class":130},[109,2176,1827],{"class":126},[109,2178,2179],{"class":130}," /etc/sysctl.conf\n",[109,2181,2182,2184,2187,2189,2191,2193,2195],{"class":111,"line":297},[109,2183,425],{"class":126},[109,2185,2186],{"class":130}," \"vm.overcommit_ratio=80\"",[109,2188,120],{"class":119},[109,2190,634],{"class":115},[109,2192,637],{"class":130},[109,2194,1827],{"class":126},[109,2196,2179],{"class":130},[381,2198,2200],{"id":2199},"способ-5-анализ-и-исправление-утечек-памяти","Способ 5: Анализ и исправление утечек памяти",[21,2202,2203,2204,863,2207,2210],{},"Если OOM Killer периодически убивает один и тот же процесс (например, ",[51,2205,2206],{},"java",[51,2208,2209],{},"python","), вероятна утечка.",[91,2212,2213,2233,2283,2294],{},[35,2214,2215,2216],{},"Мониторинг в реальном времени:",[100,2217,2219],{"className":102,"code":2218,"language":104,"meta":105,"style":105},"watch -n 1 'ps aux --sort=-%mem | head -5'\n",[51,2220,2221],{"__ignoreMap":105},[109,2222,2223,2226,2228,2230],{"class":111,"line":112},[109,2224,2225],{"class":115},"watch",[109,2227,213],{"class":126},[109,2229,216],{"class":126},[109,2231,2232],{"class":130}," 'ps aux --sort=-%mem | head -5'\n",[35,2234,2235,2236,863,2239,2242,2243,2278,2280],{},"Для Java-приложений используйте ",[51,2237,2238],{},"jcmd",[51,2240,2241],{},"jmap"," для анализа heap:",[100,2244,2246],{"className":102,"code":2245,"language":104,"meta":105,"style":105},"jcmd \u003CPID> GC.heap_info\njmap -dump:live,format=b,file=heap.hprof \u003CPID>\n",[51,2247,2248,2263],{"__ignoreMap":105},[109,2249,2250,2252,2254,2256,2258,2260],{"class":111,"line":112},[109,2251,2238],{"class":115},[109,2253,1705],{"class":119},[109,2255,439],{"class":130},[109,2257,442],{"class":257},[109,2259,445],{"class":119},[109,2261,2262],{"class":130}," GC.heap_info\n",[109,2264,2265,2267,2270,2272,2274,2276],{"class":111,"line":297},[109,2266,2241],{"class":115},[109,2268,2269],{"class":126}," -dump:live,format=b,file=heap.hprof",[109,2271,1705],{"class":119},[109,2273,439],{"class":130},[109,2275,442],{"class":257},[109,2277,1712],{"class":119},[133,2279],{},[1553,2281,2282],{},"Затем проанализируйте дамп через MAT (Memory Analyzer Tool).",[35,2284,2285,2286,2289,2290,2293],{},"Для процессов на C/C++ используйте ",[51,2287,2288],{},"valgrind --tool=memcheck"," при тестировании, или ",[51,2291,2292],{},"pmap -x \u003CPID>"," для просмотра детального распределения памяти.",[35,2295,2296,2297,2300],{},"Проверьте логи приложения на предмет ошибок, связанных с памятью (например, ",[51,2298,2299],{},"OutOfMemoryError"," в Java).",[374,2302],{},[16,2304,2306],{"id":2305},"профилактика","Профилактика",[32,2308,2309,2328,2334,2347,2353,2362],{},[35,2310,2311,2314,2315,175,2318,175,2321,2324,2325,239],{},[24,2312,2313],{},"Регулярный мониторинг",". Настройте алерты (через Prometheus+Grafana, Zabbix, Netdata) на ключевые метрики: ",[51,2316,2317],{},"mem.available",[51,2319,2320],{},"vmstat.si/so",[51,2322,2323],{},"oom_kill"," (счётчик в ",[51,2326,2327],{},"/proc/vmstat",[35,2329,2330,2333],{},[24,2331,2332],{},"Адекватный swap",". Размер swap рекомендуется как минимум равен размеру RAM для настольных систем, для серверов — от 1/2 до 1× RAM в зависимости от нагрузки.",[35,2335,2336,2339,2340,2343,2344,2346],{},[24,2337,2338],{},"Ограничение ресурсов через cgroups",". Для контейнеров и сервисов явно задавайте лимиты памяти (",[51,2341,2342],{},"memory.limit_in_bytes"," в Docker или ",[51,2345,564],{}," в systemd), чтобы OOM Killer срабатывал внутри изолированной группы, а не на всём хосте.",[35,2348,2349,2352],{},[24,2350,2351],{},"Обновление ПО",". Утечки памяти часто исправляются в обновлениях. Следите за changelog критичных приложений (базы данных, веб-серверы, виртуализация).",[35,2354,2355,2361],{},[24,2356,2357,2358,2360],{},"Настройка ",[51,2359,387],{}," для важных сервисов",". Как показано в Способе 3, защитите ключевые процессы от автоматического убийства.",[35,2363,2364,2367,2368,863,2370,2373],{},[24,2365,2366],{},"Планирование нагрузки",". Зная пиковые нагрузки, рассчитайте необходимый объём RAM + swap. Используйте ",[51,2369,1125],{},[51,2371,2372],{},"memtester"," для тестирования стабильности под давлением.",[1143,2375,2376],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":105,"searchDepth":297,"depth":297,"links":2378},[2379,2380,2381,2388],{"id":1544,"depth":297,"text":1545},{"id":1578,"depth":297,"text":1579},{"id":1614,"depth":297,"text":1615,"children":2382},[2383,2384,2385,2386,2387],{"id":1618,"depth":343,"text":1619},{"id":1720,"depth":343,"text":1721},{"id":1864,"depth":343,"text":1865},{"id":2040,"depth":343,"text":2041},{"id":2199,"depth":343,"text":2200},{"id":2305,"depth":297,"text":2306},"OOM","2026-04-08 22:50:26","Система Linux убивает ваши процессы? Узнайте, как работает OOM Killer, диагностировать нехватку памяти и aplicar проверенные решения. Пошаговая инструкция за 15 минут.",[2393,2396,2399,2402],{"question":2394,"answer":2395},"Почему Linux убивает мои процессы при наличии свободной памяти?","OOM Killer срабатывает не только при полном исчерпании RAM, но и при нехватке *доступной* памяти для выделения под новые процессы, учитывая overcommit и резервы ядра.",{"question":2397,"answer":2398},"Как узнать, какой процесс был убит OOM?","Используйте команду `dmesg | grep -i 'killed process'` или `journalctl -k | grep -i oom`. В логах будет указан PID и имя процесса.",{"question":2400,"answer":2401},"Можно ли полностью отключить OOM Killer?","Теоретически можно через `sysctl vm.panic_on_oom=1`, но это крайне не рекомендуется — система может полностью зависнуть. Лучше настроить политику (`oom_score_adj`) или добавить памяти.",{"question":2403,"answer":2404},"Чем OOM Killer отличается от swap?","Swap — это механизм выгрузки неактивных страниц памяти на диск. OOM Killer — крайняя мера, когда даже swap исчерпан и ядро не может найти память для критических операций.",[2406,2409,2412,2415,2418],{"name":2407,"text":2408},"Диагностика: проверьте использование памяти иswap","Выполните команды `free -h` и `vmstat 1 5`, чтобы оценить текущую загрузку RAM и swap. Обратите внимание на столбцы `available` и `si/so` (swap in/out).",{"name":2410,"text":2411},"Найдите процесс-жертву в системных логах","Используйте `dmesg -T | grep -i 'out of memory'` или `journalctl -k --since \"1 hour ago\" | grep -i oom`. Вывод покажет PID, имя процесса и оценку (oom_score), по которой он был выбран.",{"name":2413,"text":2414},"Временно увеличьте swap-пространство","Если swap мало или отсутствует, создайте временный файл подкачки: `sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile`. Это даст системе буфер.",{"name":2416,"text":2417},"Настройте overcommit и политику OOM для конкретного сервиса","Для критичного процесса (например, базы данных) уменьшите его `oom_score_adj` через systemd: создайте дроп-ин `/etc/systemd/system/\u003Cservice>.service.d/override.conf` с `[Service] OOMScoreAdjust=-900`. Перезапустите сервис.",{"name":2419,"text":2420},"Оптимизируйте приложение или добавьте физической памяти","Проанализируйте утечки памяти в приложении (например, через `valgrind` или `pmap`). Если нагрузка закономерна — рассмотрите масштабирование (горизонтальное или вертикальное).","PT20M",[1203,2423,2424,2425,2426,2427,2428,2429],"out of memory error linux","система убила процесс linux","нехватка памяти linux как исправить","linux oom kill процесс","ошибка oom что делать","memory overcommit linux","dmesg out of memory",{},[2432,1218,2433],"/errors/linux/disk-space-full","/errors/linux/segmentation-fault",{"title":1536,"description":2391},"errors/linux/out-of-memory","Статья объясняет, что такое OOM Killer (Out of Memory Killer), почему ядро Linux принудительно завершает процессы и как это исправить. Вы научитесь диагностировать нехватку памяти и настроить систему для стабильной работы.",[2438,1550,1228,2439,1230],"ошибки linux","sysadmin","error","pksz1e2acATOXe3_qhFCPVOu4sXaWU_Wor8-9pcYG2o",{"id":2443,"title":2444,"appliesTo":2445,"author":11,"body":2449,"canonical":1162,"code":1162,"createdAt":3602,"description":3603,"difficulty":1165,"draft":1166,"estimatedTime":3604,"extension":1168,"faq":3605,"howToSteps":3618,"howToTotalTime":3637,"image":1162,"keywords":3638,"locale":1212,"meta":3647,"navigation":540,"path":1218,"platform":1215,"related":3648,"section":3651,"seo":3652,"severity":1162,"stem":3653,"summary":3654,"tags":3655,"twitterCreator":1162,"twitterSite":1162,"type":1232,"updatedAt":3602,"__hash__":3660},"content_ru/guides/linux/monitor-memory-usage.md","Мониторинг использования памяти в Linux: подробное руководство",[7,8,2446,2447,2448],"Debian 10+","Fedora 35+","Арбитранные дистрибутивы с systemd",{"type":13,"value":2450,"toc":3564},[2451,2455,2461,2465,2471,2474,2484,2486,2492,2497,2542,2560,2569,2576,2585,2590,2619,2626,2638,2641,2648,2660,2663,2670,2676,2695,2699,2702,2723,2727,2734,2737,2784,2814,2821,2823,2841,2844,2853,2856,2870,2876,2880,2884,2938,2942,2973,2977,2981,2987,3113,3122,3128,3134,3140,3160,3163,3194,3196,3200,3318,3322,3326,3354,3358,3491,3495,3508,3512,3533,3551,3561],[16,2452,2454],{"id":2453},"введение","Введение",[21,2456,2457,2458,2460],{},"Эффективный мониторинг оперативной памяти (RAM) — ключевой навык для администратора Linux и разработчика, работающего с серверами. Некорректное использование памяти приводит к замедлению системы, ошибкам ",[51,2459,1550],{}," и аварийным перезагрузкам. В этом гайде вы узнаете, как с помощью встроенных и сторонних инструментов получить точную информацию о состоянии памяти, интерпретировать её и принимать обоснованные решения.",[16,2462,2464],{"id":2463},"основные-команды-для-быстрого-просмотра","Основные команды для быстрого просмотра",[381,2466,2468,2470],{"id":2467},"free-общая-статистика",[51,2469,165],{},": общая статистика",[21,2472,2473],{},"Самый простой способ получить сводку:",[100,2475,2476],{"className":102,"code":158,"language":104,"meta":105,"style":105},[51,2477,2478],{"__ignoreMap":105},[109,2479,2480,2482],{"class":111,"line":112},[109,2481,165],{"class":115},[109,2483,168],{"class":126},[21,2485,135],{},[100,2487,2490],{"className":2488,"code":2489,"language":141},[139],"              total        used        free      shared  buff/cache   available\nMem:           7.7G        1.2G        5.1G        156M        1.4G        6.1G\nSwap:          2.0G          0B        2.0G\n",[51,2491,2489],{"__ignoreMap":105},[21,2493,2494],{},[24,2495,2496],{},"Ключевые столбцы:",[32,2498,2499,2506,2516,2523,2531],{},[35,2500,2501,2505],{},[24,2502,2503],{},[51,2504,174],{}," — общий объём.",[35,2507,2508,2512,2513],{},[24,2509,2510],{},[51,2511,178],{}," — utilised memory (приложения + кэши). ",[24,2514,2515],{},"Не путать с реальным потреблением!",[35,2517,2518,2522],{},[24,2519,2520],{},[51,2521,165],{}," — полностью неиспользуемая память (в Linux это значение часто мало).",[35,2524,2525,2530],{},[24,2526,2527],{},[51,2528,2529],{},"buff/cache"," — память, занятая кэшем диска и буферами.",[35,2532,2533,2537,2538,2541],{},[24,2534,2535],{},[51,2536,181],{}," — ",[24,2539,2540],{},"самый важный показатель",". Оценка памяти, доступной для новых процессов без своппинга.",[1854,2543,2544],{},[21,2545,2546,2547,2550,2551,2553,2554,2556,2557,2559],{},"💡 ",[24,2548,2549],{},"Совет:"," Всегда смотрите на ",[51,2552,181],{},", а не на ",[51,2555,165],{},". Высокий ",[51,2558,2529],{}," — это нормально и полезно.",[381,2561,2563,2565,2566,2568],{"id":2562},"top-htop-мониторинг-в-реальном-времени",[51,2564,207],{}," / ",[51,2567,230],{},": мониторинг в реальном времени",[21,2570,2571,2573,2574,372],{},[51,2572,207],{}," есть в любой системе. Для более удобного интерфейса установите ",[51,2575,230],{},[100,2577,2579],{"className":102,"code":2578,"language":104,"meta":105,"style":105},"htop\n",[51,2580,2581],{"__ignoreMap":105},[109,2582,2583],{"class":111,"line":112},[109,2584,2578],{"class":115},[21,2586,2587,2588,98],{},"В ",[51,2589,230],{},[32,2591,2592,2607,2613],{},[35,2593,2594,2595,2599,2600,2603,2604,2606],{},"Нажмите ",[24,2596,2597],{},[51,2598,234],{}," → выберите сортировку по ",[51,2601,2602],{},"%MEM"," (процент от общей RAM) или ",[51,2605,1680],{}," (физическая память в KiB).",[35,2608,2609,2610,2612],{},"Столбец ",[51,2611,1676],{}," — виртуальная память (включая разделяемые библиотеки, своп).",[35,2614,2609,2615,2618],{},[51,2616,2617],{},"SHR"," — разделяемая память (например, общие библиотеки).",[381,2620,2622,2625],{"id":2621},"vmstat-сводка-по-виртуальной-памяти",[51,2623,2624],{},"vmstat",": сводка по виртуальной памяти",[100,2627,2629],{"className":102,"code":2628,"language":104,"meta":105,"style":105},"vmstat -s\n",[51,2630,2631],{"__ignoreMap":105},[109,2632,2633,2635],{"class":111,"line":112},[109,2634,2624],{"class":115},[109,2636,2637],{"class":126}," -s\n",[21,2639,2640],{},"Покажет детальную статистику, включая количество своп-ин и аут.",[381,2642,2644,2647],{"id":2643},"procmeminfo-сырые-данные-от-ядра",[51,2645,2646],{},"/proc/meminfo",": «сырые» данные от ядра",[100,2649,2651],{"className":102,"code":2650,"language":104,"meta":105,"style":105},"cat /proc/meminfo\n",[51,2652,2653],{"__ignoreMap":105},[109,2654,2655,2657],{"class":111,"line":112},[109,2656,312],{"class":115},[109,2658,2659],{"class":130}," /proc/meminfo\n",[21,2661,2662],{},"Это источник для всех вышеперечисленных утилит. Полезно для скриптов.",[381,2664,2666,2669],{"id":2665},"sar-исторические-данные-требует-настройки",[51,2667,2668],{},"sar",": исторические данные (требует настройки)",[21,2671,2672,2673,98],{},"Если установлен пакет ",[51,2674,2675],{},"sysstat",[100,2677,2679],{"className":102,"code":2678,"language":104,"meta":105,"style":105},"sar -r 1 3  # каждую секунду, 3 раза\n",[51,2680,2681],{"__ignoreMap":105},[109,2682,2683,2685,2687,2689,2692],{"class":111,"line":112},[109,2684,2668],{"class":115},[109,2686,359],{"class":126},[109,2688,216],{"class":126},[109,2690,2691],{"class":126}," 3",[109,2693,2694],{"class":419},"  # каждую секунду, 3 раза\n",[16,2696,2698],{"id":2697},"графические-утилиты","Графические утилиты",[21,2700,2701],{},"Для рабочих станций с GUI:",[32,2703,2704,2714],{},[35,2705,2706,2709,2710,2713],{},[24,2707,2708],{},"GNOME System Monitor"," (",[51,2711,2712],{},"gnome-system-monitor","): вкладка «Ресурсы» показывает графики памяти и свопа.",[35,2715,2716,2709,2719,2722],{},[24,2717,2718],{},"KDE System Guard",[51,2720,2721],{},"ksysguard","): аналогичен, с возможностью добавления датчиков.",[16,2724,2726],{"id":2725},"расширенные-инструменты","Расширенные инструменты",[381,2728,2730,2733],{"id":2729},"nmon-мощный-мониторинг-в-одном-окне",[51,2731,2732],{},"nmon"," — мощный мониторинг в одном окне",[21,2735,2736],{},"Установка:",[100,2738,2740],{"className":102,"code":2739,"language":104,"meta":105,"style":105},"# Ubuntu/Debian\nsudo apt install nmon\n\n# RHEL/CentOS/Fedora\nsudo yum install nmon  # или dnf\n",[51,2741,2742,2747,2760,2764,2769],{"__ignoreMap":105},[109,2743,2744],{"class":111,"line":112},[109,2745,2746],{"class":419},"# Ubuntu/Debian\n",[109,2748,2749,2751,2754,2757],{"class":111,"line":297},[109,2750,604],{"class":115},[109,2752,2753],{"class":130}," apt",[109,2755,2756],{"class":130}," install",[109,2758,2759],{"class":130}," nmon\n",[109,2761,2762],{"class":111,"line":343},[109,2763,541],{"emptyLinePlaceholder":540},[109,2765,2766],{"class":111,"line":544},[109,2767,2768],{"class":419},"# RHEL/CentOS/Fedora\n",[109,2770,2771,2773,2776,2778,2781],{"class":111,"line":550},[109,2772,604],{"class":115},[109,2774,2775],{"class":130}," yum",[109,2777,2756],{"class":130},[109,2779,2780],{"class":130}," nmon",[109,2782,2783],{"class":419},"  # или dnf\n",[21,2785,2786,2787,2789,2790,2795,2796,2801,2802,2807,2808,2813],{},"Запуск: ",[51,2788,2732],{},". Нажмите ",[24,2791,2792],{},[51,2793,2794],{},"m"," для memory-графиков, ",[24,2797,2798],{},[51,2799,2800],{},"c"," для CPU, ",[24,2803,2804],{},[51,2805,2806],{},"d"," для диска. ",[24,2809,2810],{},[51,2811,2812],{},"q"," — выход.",[381,2815,2817,2820],{"id":2816},"glances-кросс-платформенный-монитор-с-веб-интерфейсом",[51,2818,2819],{},"glances"," — кросс-платформенный монитор с веб-интерфейсом",[21,2822,2736],{},[100,2824,2826],{"className":102,"code":2825,"language":104,"meta":105,"style":105},"pip3 install glances  # требует Python\n",[51,2827,2828],{"__ignoreMap":105},[109,2829,2830,2833,2835,2838],{"class":111,"line":112},[109,2831,2832],{"class":115},"pip3",[109,2834,2756],{"class":130},[109,2836,2837],{"class":130}," glances",[109,2839,2840],{"class":419},"  # требует Python\n",[21,2842,2843],{},"Запуск:",[100,2845,2847],{"className":102,"code":2846,"language":104,"meta":105,"style":105},"glances\n",[51,2848,2849],{"__ignoreMap":105},[109,2850,2851],{"class":111,"line":112},[109,2852,2846],{"class":115},[21,2854,2855],{},"Для удалённого мониторинга:",[100,2857,2859],{"className":102,"code":2858,"language":104,"meta":105,"style":105},"glances -w  # запускает веб-сервер на порту 61208\n",[51,2860,2861],{"__ignoreMap":105},[109,2862,2863,2865,2867],{"class":111,"line":112},[109,2864,2819],{"class":115},[109,2866,2085],{"class":126},[109,2868,2869],{"class":419},"  # запускает веб-сервер на порту 61208\n",[21,2871,2872,2873,372],{},"Затем откройте в браузере ",[51,2874,2875],{},"http://\u003Cваш_сервер>:61208",[16,2877,2879],{"id":2878},"как-интерпретировать-показатели","Как интерпретировать показатели",[381,2881,2883],{"id":2882},"распространённые-ошибки-новичков","Распространённые ошибки новичков",[91,2885,2886,2897,2917,2925],{},[35,2887,2888,2894,2895,372],{},[24,2889,2890,2891,2893],{},"Свободная память (",[51,2892,165],{},") близка к нулю"," — это нормально. Linux использует RAM для кэша. Смотрите на ",[51,2896,181],{},[35,2898,2899,2906,2907,2910,2911,1275,2914,2916],{},[24,2900,2901,2902,2905],{},"Своп (",[51,2903,2904],{},"swap",") активно используется"," — если ",[51,2908,2909],{},"si","/",[51,2912,2913],{},"so",[51,2915,2624],{}," постоянно не ноль, система активно своппит. Это признак нехватки RAM.",[35,2918,2919,2924],{},[24,2920,2921,2922],{},"Высокий ",[51,2923,2529],{}," — не проблема. Система освободит эту память, если процессу понадобится.",[35,2926,2927,2934,2935,2937],{},[24,2928,2929,2931,2932],{},[51,2930,1680],{}," процесса больше, чем ",[51,2933,1676],{}," — обычно невозможно. Проверьте, не дублируется ли процесс в ",[51,2936,207],{}," (например, потоки).",[381,2939,2941],{"id":2940},"тревожные-сигналы","Тревожные сигналы",[32,2943,2944,2951,2961],{},[35,2945,2946,2948,2949,372],{},[51,2947,181],{}," \u003C 10% от ",[51,2950,174],{},[35,2952,2953,2954,2910,2956,2958,2959,372],{},"Постоянный ",[51,2955,2909],{},[51,2957,2913],{}," > 0 в ",[51,2960,2624],{},[35,2962,2963,2964,1275,2967,2969,2970,239],{},"Частые сообщения ",[51,2965,2966],{},"Out of memory",[51,2968,116],{}," или логах (",[51,2971,2972],{},"journalctl -k | grep -i oom",[16,2974,2976],{"id":2975},"автоматизация-мониторинга","Автоматизация мониторинга",[381,2978,2980],{"id":2979},"простой-скрипт-для-отправки-предупреждений","Простой скрипт для отправки предупреждений",[21,2982,2983,2984,98],{},"Создайте ",[51,2985,2986],{},"/usr/local/bin/memory_alert.sh",[100,2988,2990],{"className":102,"code":2989,"language":104,"meta":105,"style":105},"#!/bin/bash\nTHRESHOLD=90  # процент\nCURRENT=$(free | awk '/Mem:/ {printf(\"%.0f\"), $3/$2 * 100}')\nif [ \"$CURRENT\" -ge \"$THRESHOLD\" ]; then\n    echo \"Внимание: использование памяти ${CURRENT}% (порог ${THRESHOLD}%)\" | \\\n    mail -s \"Алерт: память на $(hostname)\" admin@example.com\nfi\n",[51,2991,2992,2997,3010,3032,3065,3088,3108],{"__ignoreMap":105},[109,2993,2994],{"class":111,"line":112},[109,2995,2996],{"class":419},"#!/bin/bash\n",[109,2998,2999,3002,3004,3007],{"class":111,"line":297},[109,3000,3001],{"class":257},"THRESHOLD",[109,3003,567],{"class":119},[109,3005,3006],{"class":130},"90",[109,3008,3009],{"class":419},"  # процент\n",[109,3011,3012,3015,3017,3020,3022,3024,3026,3029],{"class":111,"line":343},[109,3013,3014],{"class":257},"CURRENT",[109,3016,567],{"class":119},[109,3018,3019],{"class":257},"$(",[109,3021,165],{"class":115},[109,3023,120],{"class":119},[109,3025,275],{"class":115},[109,3027,3028],{"class":130}," '/Mem:/ {printf(\"%.0f\"), $3/$2 * 100}'",[109,3030,3031],{"class":257},")\n",[109,3033,3034,3037,3040,3043,3046,3048,3051,3054,3057,3059,3062],{"class":111,"line":544},[109,3035,3036],{"class":119},"if",[109,3038,3039],{"class":257}," [ ",[109,3041,3042],{"class":130},"\"",[109,3044,3045],{"class":257},"$CURRENT",[109,3047,3042],{"class":130},[109,3049,3050],{"class":119}," -ge",[109,3052,3053],{"class":130}," \"",[109,3055,3056],{"class":257},"$THRESHOLD",[109,3058,3042],{"class":130},[109,3060,3061],{"class":257}," ]; ",[109,3063,3064],{"class":119},"then\n",[109,3066,3067,3070,3073,3075,3078,3080,3083,3085],{"class":111,"line":550},[109,3068,3069],{"class":126},"    echo",[109,3071,3072],{"class":130}," \"Внимание: использование памяти ${",[109,3074,3014],{"class":257},[109,3076,3077],{"class":130},"}% (порог ${",[109,3079,3001],{"class":257},[109,3081,3082],{"class":130},"}%)\"",[109,3084,120],{"class":119},[109,3086,3087],{"class":126}," \\\n",[109,3089,3090,3093,3096,3099,3102,3105],{"class":111,"line":556},[109,3091,3092],{"class":115},"    mail",[109,3094,3095],{"class":126}," -s",[109,3097,3098],{"class":130}," \"Алерт: память на $(",[109,3100,3101],{"class":115},"hostname",[109,3103,3104],{"class":130},")\"",[109,3106,3107],{"class":130}," admin@example.com\n",[109,3109,3110],{"class":111,"line":561},[109,3111,3112],{"class":119},"fi\n",[21,3114,3115,3116,2709,3119,1562],{},"Добавьте в ",[51,3117,3118],{},"crontab",[51,3120,3121],{},"crontab -e",[100,3123,3126],{"className":3124,"code":3125,"language":141},[139],"*/5 * * * * /usr/local/bin/memory_alert.sh\n",[51,3127,3125],{"__ignoreMap":105},[381,3129,3131,3132],{"id":3130},"логирование-через-sar","Логирование через ",[51,3133,2668],{},[21,3135,3136,3137,3139],{},"Настройте ",[51,3138,2675],{}," (в большинстве дистрибутивов уже установлен):",[100,3141,3143],{"className":102,"code":3142,"language":104,"meta":105,"style":105},"sudo systemctl enable --now sysstat\n",[51,3144,3145],{"__ignoreMap":105},[109,3146,3147,3149,3151,3154,3157],{"class":111,"line":112},[109,3148,604],{"class":115},[109,3150,1888],{"class":130},[109,3152,3153],{"class":130}," enable",[109,3155,3156],{"class":126}," --now",[109,3158,3159],{"class":130}," sysstat\n",[21,3161,3162],{},"Данные будут собираться каждые 10 минут. Просмотр:",[100,3164,3166],{"className":102,"code":3165,"language":104,"meta":105,"style":105},"sar -r -f /var/log/sa/sa$(date +%d)  # за сегодня\n",[51,3167,3168],{"__ignoreMap":105},[109,3169,3170,3172,3174,3177,3180,3182,3185,3188,3191],{"class":111,"line":112},[109,3171,2668],{"class":115},[109,3173,359],{"class":126},[109,3175,3176],{"class":126}," -f",[109,3178,3179],{"class":130}," /var/log/sa/sa",[109,3181,3019],{"class":257},[109,3183,3184],{"class":115},"date",[109,3186,3187],{"class":130}," +%d",[109,3189,3190],{"class":257},")  ",[109,3192,3193],{"class":419},"# за сегодня\n",[374,3195],{},[16,3197,3199],{"id":3198},"сравнение-инструментов","Сравнение инструментов",[3201,3202,3203,3222],"table",{},[3204,3205,3206],"thead",{},[3207,3208,3209,3213,3216,3219],"tr",{},[3210,3211,3212],"th",{},"Инструмент",[3210,3214,3215],{},"Плюсы",[3210,3217,3218],{},"Минусы",[3210,3220,3221],{},"Когда использовать",[3223,3224,3225,3241,3258,3273,3288,3303],"tbody",{},[3207,3226,3227,3232,3235,3238],{},[3228,3229,3230],"td",{},[51,3231,165],{},[3228,3233,3234],{},"Простота, есть везде",[3228,3236,3237],{},"Нет детализации по процессам",[3228,3239,3240],{},"Быстрая проверка в скриптах",[3207,3242,3243,3249,3252,3255],{},[3228,3244,3245,2910,3247],{},[51,3246,207],{},[51,3248,230],{},[3228,3250,3251],{},"Интерактив, сортировка",[3228,3253,3254],{},"Только снимок на момент запуска",[3228,3256,3257],{},"Поиск «прожорливых» процессов",[3207,3259,3260,3264,3267,3270],{},[3228,3261,3262],{},[51,3263,2624],{},[3228,3265,3266],{},"Сводка по свопу, CPU",[3228,3268,3269],{},"Мало деталей по памяти",[3228,3271,3272],{},"Общая оценка нагрузки",[3207,3274,3275,3279,3282,3285],{},[3228,3276,3277],{},[51,3278,2668],{},[3228,3280,3281],{},"История, автоматический сбор",[3228,3283,3284],{},"Требует настройки",[3228,3286,3287],{},"Анализ трендов, пост-мортем",[3207,3289,3290,3294,3297,3300],{},[3228,3291,3292],{},[51,3293,2732],{},[3228,3295,3296],{},"Графики, все метрики в одном",[3228,3298,3299],{},"Только консольный, сложный UI",[3228,3301,3302],{},"Глубокий анализ в реальном времени",[3207,3304,3305,3309,3312,3315],{},[3228,3306,3307],{},[51,3308,2819],{},[3228,3310,3311],{},"Веб-интерфейс, кросс-платформа",[3228,3313,3314],{},"Требует Python, больше ресурсов",[3228,3316,3317],{},"Удалённый мониторинг нескольких серверов",[16,3319,3321],{"id":3320},"дополнительные-возможности","Дополнительные возможности",[381,3323,3325],{"id":3324},"мониторинг-памяти-конкретного-процесса","Мониторинг памяти конкретного процесса",[100,3327,3329],{"className":102,"code":3328,"language":104,"meta":105,"style":105},"# Узнать, сколько памяти использует процесс с PID 1234\npmap -x 1234 | tail -1\n",[51,3330,3331,3336],{"__ignoreMap":105},[109,3332,3333],{"class":111,"line":112},[109,3334,3335],{"class":419},"# Узнать, сколько памяти использует процесс с PID 1234\n",[109,3337,3338,3341,3344,3347,3349,3351],{"class":111,"line":297},[109,3339,3340],{"class":115},"pmap",[109,3342,3343],{"class":126}," -x",[109,3345,3346],{"class":126}," 1234",[109,3348,120],{"class":119},[109,3350,283],{"class":115},[109,3352,3353],{"class":126}," -1\n",[381,3355,3357],{"id":3356},"поиск-процессов-использующих-своп","Поиск процессов, использующих своп",[100,3359,3361],{"className":102,"code":3360,"language":104,"meta":105,"style":105},"for pid in $(ls /proc | grep '^[0-9]'); do\n    swap=$(grep VmSwap /proc/$pid/smaps 2>/dev/null | awk '{sum+=$2} END {print sum}')\n    if [ \"$swap\" -gt 0 ]; then\n        echo \"PID $pid использует ${swap}KiB свопа: $(ps -p $pid -o comm=)\"\n    fi\ndone\n",[51,3362,3363,3390,3427,3451,3481,3486],{"__ignoreMap":105},[109,3364,3365,3367,3369,3371,3373,3376,3379,3381,3383,3386,3388],{"class":111,"line":112},[109,3366,254],{"class":119},[109,3368,258],{"class":257},[109,3370,261],{"class":119},[109,3372,264],{"class":257},[109,3374,3375],{"class":115},"ls",[109,3377,3378],{"class":130}," /proc",[109,3380,120],{"class":119},[109,3382,123],{"class":115},[109,3384,3385],{"class":130}," '^[0-9]'",[109,3387,291],{"class":257},[109,3389,294],{"class":119},[109,3391,3392,3395,3397,3399,3402,3405,3407,3409,3412,3415,3418,3420,3422,3425],{"class":111,"line":297},[109,3393,3394],{"class":257},"    swap",[109,3396,567],{"class":119},[109,3398,3019],{"class":257},[109,3400,3401],{"class":115},"grep",[109,3403,3404],{"class":130}," VmSwap",[109,3406,315],{"class":130},[109,3408,306],{"class":257},[109,3410,3411],{"class":130},"/smaps",[109,3413,3414],{"class":119}," 2>",[109,3416,3417],{"class":130},"/dev/null",[109,3419,120],{"class":119},[109,3421,275],{"class":115},[109,3423,3424],{"class":130}," '{sum+=$2} END {print sum}'",[109,3426,3031],{"class":257},[109,3428,3429,3432,3434,3436,3439,3441,3444,3447,3449],{"class":111,"line":343},[109,3430,3431],{"class":119},"    if",[109,3433,3039],{"class":257},[109,3435,3042],{"class":130},[109,3437,3438],{"class":257},"$swap",[109,3440,3042],{"class":130},[109,3442,3443],{"class":119}," -gt",[109,3445,3446],{"class":126}," 0",[109,3448,3061],{"class":257},[109,3450,3064],{"class":119},[109,3452,3453,3456,3458,3460,3463,3465,3468,3470,3472,3475,3478],{"class":111,"line":544},[109,3454,3455],{"class":126},"        echo",[109,3457,303],{"class":130},[109,3459,306],{"class":257},[109,3461,3462],{"class":130}," использует ${",[109,3464,2904],{"class":257},[109,3466,3467],{"class":130},"}KiB свопа: $(",[109,3469,267],{"class":115},[109,3471,529],{"class":126},[109,3473,3474],{"class":257}," $pid",[109,3476,3477],{"class":126}," -o",[109,3479,3480],{"class":130}," comm=)\"\n",[109,3482,3483],{"class":111,"line":550},[109,3484,3485],{"class":119},"    fi\n",[109,3487,3488],{"class":111,"line":556},[109,3489,3490],{"class":119},"done\n",[381,3492,3494],{"id":3493},"проверка-фрагментации-памяти-только-для-numa-систем","Проверка фрагментации памяти (только для NUMA-систем)",[100,3496,3498],{"className":102,"code":3497,"language":104,"meta":105,"style":105},"numactl --hardware\n",[51,3499,3500],{"__ignoreMap":105},[109,3501,3502,3505],{"class":111,"line":112},[109,3503,3504],{"class":115},"numactl",[109,3506,3507],{"class":126}," --hardware\n",[16,3509,3511],{"id":3510},"заключение-последняя-содержательная-секция","Заключение (последняя содержательная секция)",[21,3513,3514,3515,175,3517,3519,3520,175,3522,175,3524,3526,3527,3529,3530,3532],{},"Эффективный мониторинг памяти в Linux строится на двух китах: регулярный сбор базовой статистики (",[51,3516,165],{},[51,3518,207],{},") и углублённый анализ при проблемах (",[51,3521,2732],{},[51,3523,2819],{},[51,3525,3340],{},"). Не паникуйте при высоком показателе ",[51,3528,2529],{}," — это оптимизация ядра. Сфокусируйтесь на ",[51,3531,181],{}," и активности свопа.",[21,3534,3535,3538,3539,182,3541,3543,3544,3546,3547,3550],{},[24,3536,3537],{},"Начните с простого:"," добавьте в свой ежедневный чек-лист команду ",[51,3540,1400],{},[51,3542,230],{}," для быстрой оценки. При возникновении проблем используйте ",[51,3545,2732],{}," для записи сессии (",[51,3548,3549],{},"nmon -f -s 10 -c 100",") и последующего анализа.",[21,3552,3553,3554,863,3556,3558,3559,372],{},"Помните: лучший мониторинг — тот, который настроен заранее и предупреждает об проблемах до их критического развития. Автоматизируйте сбор данных через ",[51,3555,2668],{},[51,3557,2819],{}," и настройте алерты на низкий ",[51,3560,181],{},[1143,3562,3563],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":105,"searchDepth":297,"depth":297,"links":3565},[3566,3567,3579,3580,3586,3590,3595,3596,3601],{"id":2453,"depth":297,"text":2454},{"id":2463,"depth":297,"text":2464,"children":3568},[3569,3571,3573,3575,3577],{"id":2467,"depth":343,"text":3570},"free: общая статистика",{"id":2562,"depth":343,"text":3572},"top / htop: мониторинг в реальном времени",{"id":2621,"depth":343,"text":3574},"vmstat: сводка по виртуальной памяти",{"id":2643,"depth":343,"text":3576},"/proc/meminfo: «сырые» данные от ядра",{"id":2665,"depth":343,"text":3578},"sar: исторические данные (требует настройки)",{"id":2697,"depth":297,"text":2698},{"id":2725,"depth":297,"text":2726,"children":3581},[3582,3584],{"id":2729,"depth":343,"text":3583},"nmon — мощный мониторинг в одном окне",{"id":2816,"depth":343,"text":3585},"glances — кросс-платформенный монитор с веб-интерфейсом",{"id":2878,"depth":297,"text":2879,"children":3587},[3588,3589],{"id":2882,"depth":343,"text":2883},{"id":2940,"depth":343,"text":2941},{"id":2975,"depth":297,"text":2976,"children":3591},[3592,3593],{"id":2979,"depth":343,"text":2980},{"id":3130,"depth":343,"text":3594},"Логирование через sar",{"id":3198,"depth":297,"text":3199},{"id":3320,"depth":297,"text":3321,"children":3597},[3598,3599,3600],{"id":3324,"depth":343,"text":3325},{"id":3356,"depth":343,"text":3357},{"id":3493,"depth":343,"text":3494},{"id":3510,"depth":297,"text":3511},"2026-02-14 10:59:29","Узнайте, как отслеживать потребление памяти в Linux с помощью командной строки и графических инструментов. Пошаговая инструкция с примерами для Ubuntu, CentOS и других дистрибутивов.","10-15 мин",[3606,3609,3612,3615],{"answer":3607,"question":3608},"Используйте `free -h`. Флаг `-h` выводит числа в удобочитаемом формате (ГиБ/МиБ).","Какой командой быстро увидеть общую статистику по памяти?",{"answer":3610,"question":3611},"`Available` — это примерный объём памяти, доступный для новых приложений без своппинга. Учитывает кэши и буферы, которые система может освободить. Это более точный показатель, чем `free`.","В выводе `free` что такое `available` и чем она отличается от `free`?",{"answer":3613,"question":3614},"Установите `htop` (`sudo apt install htop` или `sudo yum install htop`) и нажмите `F2` → «Display options» → включите «Detailed mem» и «Swap». Для графиков используйте `nmon` или веб-интерфейс `glances`.","Как мониторить память в реальном времени с графиком?",{"answer":3616,"question":3617},"Linux активно использует свободную RAM для кэширования диска (столбец `buff/cache`). Это нормально и ускоряет работу. Система автоматически освободит кэш, если приложению понадобится память.","Почему `used` в `free` огромный, а система не тормозит?",[3619,3622,3625,3628,3631,3634],{"name":3620,"text":3621},"Установите необходимые утилиты (опционально)","Для расширенного мониторинга установите `htop`, `nmon` или `glances` через менеджер пакетов вашего дистрибутива.",{"name":3623,"text":3624},"Проверьте общую статистику памяти","Выполните команду `free -h`. Обратите внимание на строки `Mem:` и `Swap:`.",{"name":3626,"text":3627},"Изучите динамику процессов","Запустите `top` или `htop`. Нажмите `F6` в `htop` и отсортируйте по столбцу `%MEM` или `RES`.",{"name":3629,"text":3630},"Проанализируйте детальную информацию по процессу","Найдите PID нужного процесса через `top` и выполните `pmap -x \u003CPID>`, чтобы увидеть детальное распределение памяти.",{"name":3632,"text":3633},"Включите сбор исторических данных","Установите пакет `sysstat` и запустите `sar -r 1 5` для сбора статистики каждую секунду, 5 раз.",{"name":3635,"text":3636},"Настройте графический мониторинг (если есть GUI)","Запустите `gnome-system-monitor` (GNOME) или `ksysguard` (KDE) для визуального контроля.","PT15M",[3639,3640,3641,3642,3643,3644,3645,3646],"мониторинг памяти linux","проверить использование оперативной памяти linux","команда free linux","top htop память","как посмотреть свободную память в линукс","визуализация использования памяти linux","sar память linux","/proc/meminfo расшифровка",{},[3649,3650,1214],"/guides/linux/monitor-disk-usage","/guides/linux/process-management-basics","Гайды Linux",{"title":2444,"description":3603},"guides/linux/monitor-memory-usage","В этом гайде вы освоите практические методы мониторинга оперативной памяти в Linux: от базовых команд `free` и `top` до продвинутых утилит `nmon` и `glances`. Вы научитесь интерпретировать показатели и настроить автоматический сбор статистики.",[3656,3657,1215,3658,2439,3659,104],"мониторинг","память","command-line","performance","SgXkJ7qm9QAcLpH_NvbCZzrc4YGuIL9Pt57zK8-UDqg",{"id":3662,"title":3663,"appliesTo":3664,"author":11,"body":3669,"canonical":1162,"code":1162,"createdAt":4680,"description":4681,"difficulty":1165,"draft":1166,"estimatedTime":4682,"extension":1168,"faq":4683,"howToSteps":4696,"howToTotalTime":4712,"image":1162,"keywords":4713,"locale":1212,"meta":4722,"navigation":540,"path":1219,"platform":1215,"related":4723,"section":3651,"seo":4727,"severity":1162,"stem":4728,"summary":4729,"tags":4730,"twitterCreator":1162,"twitterSite":1162,"type":1232,"updatedAt":4680,"__hash__":4732},"content_ru/guides/linux/systemd-cgroups.md","Управление ресурсами Linux через systemd cgroups: полное руководство",[3665,3666,3667,3668],"systemd 235+","Linux ядро 4.5+","Ubuntu 18.04+","CentOS 8+",{"type":13,"value":3670,"toc":4659},[3671,3675,3685,3696,3714,3717,3721,3724,3793,3797,3800,3886,3893,3897,3903,4030,4037,4041,4047,4102,4104,4110,4113,4152,4156,4162,4233,4237,4240,4403,4407,4414,4437,4444,4465,4481,4489,4519,4526,4543,4545,4549,4565,4646,4650,4656],[16,3672,3674],{"id":3673},"введение-зачем-это-нужно","Введение / Зачем это нужно",[21,3676,3677,3680,3681,3684],{},[24,3678,3679],{},"Control Groups (cgroups)"," — это механизм ядра Linux, который позволяет изолировать и ограничивать использование ресурсов (CPU, памяти, дискового ввода-вывода, сети) для групп процессов. ",[24,3682,3683],{},"Systemd",", являющийся инициализатором и менеджером системных служб в большинстве современных дистрибутивов, предоставляет удобный и декларативный интерфейс для работы с cgroups.",[21,3686,3687,3688,3691,3692,3695],{},"Этот гайд покажет, как использовать встроенные возможности systemd для управления ресурсами без необходимости вручную работать с ",[51,3689,3690],{},"cgcreate"," или редактировать файлы в ",[51,3693,3694],{},"/sys/fs/cgroup",". Вы сможете:",[32,3697,3698,3701,3704,3707],{},[35,3699,3700],{},"Ограничить объём оперативной памяти и файлового подкачивания (swap) для службы.",[35,3702,3703],{},"Установить лимит на использование CPU (в процентах или в ядрах).",[35,3705,3706],{},"Настроить приоритет дискового I/O.",[35,3708,3709,3710,3713],{},"Создавать логические группы процессов (срезы — ",[1553,3711,3712],{},"slices",") для единого управления ресурсами.",[21,3715,3716],{},"После выполнения этого руководства вы получите полный контроль над расходованием ресурсов вашими сервисами, что особенно важно для хостинга, контейнеризации и стабильной работы многопользовательских систем.",[16,3718,3720],{"id":3719},"требования-подготовка","Требования / Подготовка",[21,3722,3723],{},"Перед началом убедитесь, что:",[91,3725,3726,3734,3748,3780],{},[35,3727,3728,3729,3731,3732,372],{},"У вас есть права ",[24,3730,1237],{}," или пользователь с правами через ",[51,3733,604],{},[35,3735,3736,3737,3740,3741,3744,3745,372],{},"Установлен ",[24,3738,3739],{},"systemd"," версии ",[24,3742,3743],{},"235"," или новее. Проверить: ",[51,3746,3747],{},"systemctl --version",[35,3749,3750,3751,3754,3755,3758,3759],{},"Ядро Linux поддерживает ",[24,3752,3753],{},"cgroups v2"," (рекомендуется) или v1. Проверить тип иерархии: ",[51,3756,3757],{},"mount | grep cgroup",".\n",[32,3760,3761,3770],{},[35,3762,3763,3764,3767,3768,372],{},"Идеальный вариант: ",[51,3765,3766],{},"cgroup2"," смонтирован в ",[51,3769,3694],{},[35,3771,3772,3773,175,3776,3779],{},"Если смонтированы старые контроллеры (",[51,3774,3775],{},"memory",[51,3777,3778],{},"cpu"," и т.д.), systemd всё равно сможет управлять ими через единую иерархию.",[35,3781,3782,3783,175,3786,3789,3790,372],{},"Вы знаете имя службы systemd, для которой хотите задать ограничения (например, ",[51,3784,3785],{},"nginx.service",[51,3787,3788],{},"docker.service","). Список активных служб: ",[51,3791,3792],{},"systemctl list-units --type=service --state=running",[16,3794,3796],{"id":3795},"шаг-1-проверьте-версию-systemd-и-поддержку-cgroups-v2","Шаг 1: Проверьте версию systemd и поддержку cgroups v2",[21,3798,3799],{},"Сначала давайте убедимся в готовности системы. Выполните в терминале:",[100,3801,3803],{"className":102,"code":3802,"language":104,"meta":105,"style":105},"# Проверка версии systemd (требуется 235+)\nsystemctl --version | head -n1\n\n# Проверка, что systemd использует cgroups v2 (предпочтительно)\n# Если в выводе есть \"cgroup2\", значит, используется единственный unified hierarchy.\nmount | grep -E 'cgroup|cgroup2'\n\n# Пример ожидаемого вывода для cgroups v2:\n# cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)\n\n# Если вы видите отдельные монтирования для memory, cpu, blkio и т.д. — это cgroups v1.\n# Systemd с ним тоже работает, но синтаксис некоторых директив может незначительно отличаться.\n",[51,3804,3805,3810,3825,3829,3834,3839,3854,3858,3863,3869,3874,3880],{"__ignoreMap":105},[109,3806,3807],{"class":111,"line":112},[109,3808,3809],{"class":419},"# Проверка версии systemd (требуется 235+)\n",[109,3811,3812,3815,3818,3820,3822],{"class":111,"line":297},[109,3813,3814],{"class":115},"systemctl",[109,3816,3817],{"class":126}," --version",[109,3819,120],{"class":119},[109,3821,221],{"class":115},[109,3823,3824],{"class":126}," -n1\n",[109,3826,3827],{"class":111,"line":343},[109,3828,541],{"emptyLinePlaceholder":540},[109,3830,3831],{"class":111,"line":544},[109,3832,3833],{"class":419},"# Проверка, что systemd использует cgroups v2 (предпочтительно)\n",[109,3835,3836],{"class":111,"line":550},[109,3837,3838],{"class":419},"# Если в выводе есть \"cgroup2\", значит, используется единственный unified hierarchy.\n",[109,3840,3841,3844,3846,3848,3851],{"class":111,"line":556},[109,3842,3843],{"class":115},"mount",[109,3845,120],{"class":119},[109,3847,123],{"class":115},[109,3849,3850],{"class":126}," -E",[109,3852,3853],{"class":130}," 'cgroup|cgroup2'\n",[109,3855,3856],{"class":111,"line":561},[109,3857,541],{"emptyLinePlaceholder":540},[109,3859,3860],{"class":111,"line":573},[109,3861,3862],{"class":419},"# Пример ожидаемого вывода для cgroups v2:\n",[109,3864,3866],{"class":111,"line":3865},9,[109,3867,3868],{"class":419},"# cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)\n",[109,3870,3872],{"class":111,"line":3871},10,[109,3873,541],{"emptyLinePlaceholder":540},[109,3875,3877],{"class":111,"line":3876},11,[109,3878,3879],{"class":419},"# Если вы видите отдельные монтирования для memory, cpu, blkio и т.д. — это cgroups v1.\n",[109,3881,3883],{"class":111,"line":3882},12,[109,3884,3885],{"class":419},"# Systemd с ним тоже работает, но синтаксис некоторых директив может незначительно отличаться.\n",[1854,3887,3888],{},[21,3889,2546,3890,3892],{},[24,3891,2549],{}," На большинстве дистрибутивов, выпущенных после 2020 года (Ubuntu 20.04+, Fedora 31+, Debian 11+), по умолчанию используется cgroups v2.",[16,3894,3896],{"id":3895},"шаг-2-создайте-кастомный-slice-необязательно-но-рекомендуется","Шаг 2: Создайте кастомный slice (необязательно, но рекомендуется)",[21,3898,3899,3902],{},[24,3900,3901],{},"Slice"," — это своего рода папка в иерархии cgroups. Все процессы, запущенные внутри определённого слота, будут наследовать его ограничения ресурсов. Это удобно для группировки связанных служб (например, всех сервисов веб-приложения).",[91,3904,3905,3931,3978,3990,4006],{},[35,3906,3907,3908,3911,3912,3915,3916],{},"Создайте конфигурационный файл для нового слота. Назовём его ",[51,3909,3910],{},"myapp.slice"," (замените ",[51,3913,3914],{},"myapp"," на осмысленное имя):",[100,3917,3919],{"className":102,"code":3918,"language":104,"meta":105,"style":105},"sudo nano /etc/systemd/system/myapp.slice\n",[51,3920,3921],{"__ignoreMap":105},[109,3922,3923,3925,3928],{"class":111,"line":112},[109,3924,604],{"class":115},[109,3926,3927],{"class":130}," nano",[109,3929,3930],{"class":130}," /etc/systemd/system/myapp.slice\n",[35,3932,3933,3934,3937,3938],{},"Добавьте базовый контент. Мы зададим слоту описание и укажем, что он должен находиться внутри системного слота ",[51,3935,3936],{},"system.slice"," (стандартная практика):",[100,3939,3941],{"className":457,"code":3940,"language":459,"meta":105,"style":105},"[Slice]\n# Описание слота\nDescription=Slice для группировки сервисов моего приложения\n# Устанавливаем лимиты ВСЕМ юнитам внутри этого слота по умолчанию.\n# Эти значения можно переопределить в конфиге конкретного сервиса.\nMemoryMax=2G\nCPUQuota=50%\n",[51,3942,3943,3948,3953,3958,3963,3968,3973],{"__ignoreMap":105},[109,3944,3945],{"class":111,"line":112},[109,3946,3947],{},"[Slice]\n",[109,3949,3950],{"class":111,"line":297},[109,3951,3952],{},"# Описание слота\n",[109,3954,3955],{"class":111,"line":343},[109,3956,3957],{},"Description=Slice для группировки сервисов моего приложения\n",[109,3959,3960],{"class":111,"line":544},[109,3961,3962],{},"# Устанавливаем лимиты ВСЕМ юнитам внутри этого слота по умолчанию.\n",[109,3964,3965],{"class":111,"line":550},[109,3966,3967],{},"# Эти значения можно переопределить в конфиге конкретного сервиса.\n",[109,3969,3970],{"class":111,"line":556},[109,3971,3972],{},"MemoryMax=2G\n",[109,3974,3975],{"class":111,"line":561},[109,3976,3977],{},"CPUQuota=50%\n",[35,3979,3980,3981,175,3984,175,3987,239],{},"Сохраните файл (",[51,3982,3983],{},"Ctrl+O",[51,3985,3986],{},"Enter",[51,3988,3989],{},"Ctrl+X",[35,3991,3992,3993],{},"Перезагрузите конфигурацию systemd:",[100,3994,3996],{"className":102,"code":3995,"language":104,"meta":105,"style":105},"sudo systemctl daemon-reload\n",[51,3997,3998],{"__ignoreMap":105},[109,3999,4000,4002,4004],{"class":111,"line":112},[109,4001,604],{"class":115},[109,4003,1888],{"class":130},[109,4005,1944],{"class":130},[35,4007,4008,4009,4012,4013],{},"Активируйте слот (хотя он и не имеет состояния ",[51,4010,4011],{},"active",", его нужно \"загрузить\" в менеджер):",[100,4014,4016],{"className":102,"code":4015,"language":104,"meta":105,"style":105},"sudo systemctl start myapp.slice\n",[51,4017,4018],{"__ignoreMap":105},[109,4019,4020,4022,4024,4027],{"class":111,"line":112},[109,4021,604],{"class":115},[109,4023,1888],{"class":130},[109,4025,4026],{"class":130}," start",[109,4028,4029],{"class":130}," myapp.slice\n",[21,4031,4032,4033,4036],{},"Теперь любой сервис, который вы добавите в этот слот (через ",[51,4034,4035],{},"Slice=myapp.slice"," в его конфиге), автоматически получит указанные выше ограничения, если не переопределит их самостоятельно.",[16,4038,4040],{"id":4039},"шаг-3-настройте-ограничения-ресурсов-для-конкретного-юнита-сервиса","Шаг 3: Настройте ограничения ресурсов для конкретного юнита (сервиса)",[21,4042,4043,4044,372],{},"Давайте добавим ограничения в конфигурационный файл вашего сервиса. Допустим, это ",[51,4045,4046],{},"myapp.service",[91,4048,4049,4066],{},[35,4050,4051,4052],{},"Создайте или отредактируйте файл юнита:",[100,4053,4055],{"className":102,"code":4054,"language":104,"meta":105,"style":105},"sudo nano /etc/systemd/system/myapp.service\n",[51,4056,4057],{"__ignoreMap":105},[109,4058,4059,4061,4063],{"class":111,"line":112},[109,4060,604],{"class":115},[109,4062,3927],{"class":130},[109,4064,4065],{"class":130}," /etc/systemd/system/myapp.service\n",[35,4067,4068,4069,4072,4073,4076,4077],{},"В секцию ",[51,4070,4071],{},"[Service]"," добавьте нужные директивы. Полный список смотрите в ",[51,4074,4075],{},"man systemd.resource-control",". Пример конфигурации:",[100,4078,4080],{"className":457,"code":4079,"language":459,"meta":105,"style":105},"[Unit]\nDescription=Моё важное приложение\n# Указываем, что сервис должен работать внутри нашего кастомного слота\n# (если вы создали слот на шаге 2). Если нет — пропустите эту строку.\n",[51,4081,4082,4087,4092,4097],{"__ignoreMap":105},[109,4083,4084],{"class":111,"line":112},[109,4085,4086],{},"[Unit]\n",[109,4088,4089],{"class":111,"line":297},[109,4090,4091],{},"Description=Моё важное приложение\n",[109,4093,4094],{"class":111,"line":343},[109,4095,4096],{},"# Указываем, что сервис должен работать внутри нашего кастомного слота\n",[109,4098,4099],{"class":111,"line":544},[109,4100,4101],{},"# (если вы создали слот на шаге 2). Если нет — пропустите эту строку.\n",[21,4103,4035],{},[100,4105,4108],{"className":4106,"code":4107,"language":141},[139],"[Service]\nType=simple\nExecStart=/usr/local/bin/myapp\n# --- Ограничения ресурсов (переопределяют или дополняют слот) ---\n# Ограничение по оперативной памяти (включая кэш). При превышении процесс получит OOM.\nMemoryMax=1G\n# Ограничение по файловому подкачиванию (swap). Установите 0, чтобы запретить.\nMemorySwapMax=512M\n# Лимит на использование CPU. 50% = половина одного ядра.\nCPUQuota=50%\n# Дополнительно: можно задать приоритет по CPU (от 1 до 10000, чем выше, тем приоритетнее)\nCPUWeight=500\n# Ограничение по дисковому I/O (в IOPS). 1000 по умолчанию.\nIOWeight=300\n# Лимит на операции чтения/записи в секунду (требует cgroups v2).\n# IOReadBandwidthMax=/dev/sda 10M\n# IOWriteBandwidthMax=/dev/sda 5M\n\n[Install]\nWantedBy=multi-user.target\n```\n",[51,4109,4107],{"__ignoreMap":105},[21,4111,4112],{},"3.  Сохраните файл.",[91,4114,4115,4133],{"start":544},[35,4116,4117,4120,4121],{},[24,4118,4119],{},"Критически важный шаг:"," Примените изменения конфигурации:",[100,4122,4123],{"className":102,"code":3995,"language":104,"meta":105,"style":105},[51,4124,4125],{"__ignoreMap":105},[109,4126,4127,4129,4131],{"class":111,"line":112},[109,4128,604],{"class":115},[109,4130,1888],{"class":130},[109,4132,1944],{"class":130},[35,4134,4135,4136],{},"Перезапустите сервис, чтобы новые лимиты вступили в силу:",[100,4137,4139],{"className":102,"code":4138,"language":104,"meta":105,"style":105},"sudo systemctl restart myapp.service\n",[51,4140,4141],{"__ignoreMap":105},[109,4142,4143,4145,4147,4149],{"class":111,"line":112},[109,4144,604],{"class":115},[109,4146,1888],{"class":130},[109,4148,1953],{"class":130},[109,4150,4151],{"class":130}," myapp.service\n",[16,4153,4155],{"id":4154},"шаг-4-управление-свойствами-во-время-выполнения-временные-изменения","Шаг 4: Управление свойствами во время выполнения (временные изменения)",[21,4157,4158,4159,372],{},"Иногда нужно быстро ограничить уже запущенный процесс без редактирования файлов. Используйте ",[51,4160,4161],{},"systemctl set-property",[32,4163,4164,4203],{},[35,4165,4166,4169,4170],{},[24,4167,4168],{},"Для постоянного изменения"," (сохранится после перезагрузки сервиса):",[100,4171,4173],{"className":102,"code":4172,"language":104,"meta":105,"style":105},"sudo systemctl set-property myapp.service MemoryMax=500M\nsudo systemctl restart myapp.service # Перезапуск обязателен!\n",[51,4174,4175,4190],{"__ignoreMap":105},[109,4176,4177,4179,4181,4184,4187],{"class":111,"line":112},[109,4178,604],{"class":115},[109,4180,1888],{"class":130},[109,4182,4183],{"class":130}," set-property",[109,4185,4186],{"class":130}," myapp.service",[109,4188,4189],{"class":130}," MemoryMax=500M\n",[109,4191,4192,4194,4196,4198,4200],{"class":111,"line":297},[109,4193,604],{"class":115},[109,4195,1888],{"class":130},[109,4197,1953],{"class":130},[109,4199,4186],{"class":130},[109,4201,4202],{"class":419}," # Перезапуск обязателен!\n",[35,4204,4205,4208,4209,4230,4232],{},[24,4206,4207],{},"Для временного, \"сырого\" (runtime) изменения"," (дествует до перезагрузки systemd или сервиса):",[100,4210,4212],{"className":102,"code":4211,"language":104,"meta":105,"style":105},"sudo systemctl set-property --runtime myapp.service CPUQuota=80%\n",[51,4213,4214],{"__ignoreMap":105},[109,4215,4216,4218,4220,4222,4225,4227],{"class":111,"line":112},[109,4217,604],{"class":115},[109,4219,1888],{"class":130},[109,4221,4183],{"class":130},[109,4223,4224],{"class":126}," --runtime",[109,4226,4186],{"class":130},[109,4228,4229],{"class":130}," CPUQuota=80%\n",[133,4231],{},"Это удобно для тестирования.",[16,4234,4236],{"id":4235},"шаг-5-проверка-результата","Шаг 5: Проверка результата",[21,4238,4239],{},"После настройки и перезапуска сервиса проверьте, что лимиты применены.",[91,4241,4242,4274,4313,4387],{},[35,4243,4244,4247,4261,4263,4264,175,4267,175,4270,4273],{},[24,4245,4246],{},"Просмотр статуса сервиса и его cgroup-свойств:",[100,4248,4250],{"className":102,"code":4249,"language":104,"meta":105,"style":105},"systemctl status myapp.service\n",[51,4251,4252],{"__ignoreMap":105},[109,4253,4254,4256,4259],{"class":111,"line":112},[109,4255,3814],{"class":115},[109,4257,4258],{"class":130}," status",[109,4260,4151],{"class":130},[133,4262],{},"В выводе ищите строки, начинающиеся с ",[51,4265,4266],{},"Memory",[51,4268,4269],{},"CPU",[51,4271,4272],{},"Tasks",". Они покажут текущие лимиты и потребление.",[35,4275,4276,4286,4305,4307,4308,4310,4311,372],{},[24,4277,4278,4279,4282,4283,4285],{},"Использование ",[51,4280,4281],{},"systemd-cgtop"," (аналог ",[51,4284,207],{}," для cgroups):",[100,4287,4289],{"className":102,"code":4288,"language":104,"meta":105,"style":105},"# Обновление каждые 2 секунды\nsystemd-cgtop -n 2\n",[51,4290,4291,4296],{"__ignoreMap":105},[109,4292,4293],{"class":111,"line":112},[109,4294,4295],{"class":419},"# Обновление каждые 2 секунды\n",[109,4297,4298,4300,4302],{"class":111,"line":297},[109,4299,4281],{"class":115},[109,4301,213],{"class":126},[109,4303,4304],{"class":126}," 2\n",[133,4306],{},"Вы увидите иерархию всех cgroups systemd и потребление ими ресурсов (MEM, CPU, IO). Ваш сервис должен отображаться в ветке ",[51,4309,3936],{}," или вашего кастомного ",[51,4312,3910],{},[35,4314,4315,4318,4382,4384,4385,239],{},[24,4316,4317],{},"Прямой просмотр файлов в виртуальной файловой системе cgroups:",[100,4319,4321],{"className":102,"code":4320,"language":104,"meta":105,"style":105},"# Перейдите в каталог вашего сервиса или слота\ncd /sys/fs/cgroup/$(systemctl show -p ControlGroup myapp.service | cut -d= -f2)\n# Посмотрите установленные лимиты (значения в байтах или процентах)\ncat memory.max\ncat cpu.max\n",[51,4322,4323,4328,4363,4368,4375],{"__ignoreMap":105},[109,4324,4325],{"class":111,"line":112},[109,4326,4327],{"class":419},"# Перейдите в каталог вашего сервиса или слота\n",[109,4329,4330,4333,4336,4338,4340,4343,4345,4348,4350,4352,4355,4358,4361],{"class":111,"line":297},[109,4331,4332],{"class":126},"cd",[109,4334,4335],{"class":130}," /sys/fs/cgroup/",[109,4337,3019],{"class":257},[109,4339,3814],{"class":115},[109,4341,4342],{"class":130}," show",[109,4344,529],{"class":126},[109,4346,4347],{"class":130}," ControlGroup",[109,4349,4186],{"class":130},[109,4351,120],{"class":119},[109,4353,4354],{"class":115}," cut",[109,4356,4357],{"class":126}," -d=",[109,4359,4360],{"class":126}," -f2",[109,4362,3031],{"class":257},[109,4364,4365],{"class":111,"line":343},[109,4366,4367],{"class":419},"# Посмотрите установленные лимиты (значения в байтах или процентах)\n",[109,4369,4370,4372],{"class":111,"line":544},[109,4371,312],{"class":115},[109,4373,4374],{"class":130}," memory.max\n",[109,4376,4377,4379],{"class":111,"line":550},[109,4378,312],{"class":115},[109,4380,4381],{"class":130}," cpu.max\n",[133,4383],{},"Для cgroups v1 пути и имена файлов будут другими (например, ",[51,4386,2342],{},[35,4388,4389,4392,4393,4396,4397,4400,4401,372],{},[24,4390,4391],{},"Проверка изнутри контейнера/процесса:"," Если приложение само может отдавать статистику (например, через ",[51,4394,4395],{},"/proc/self/status","), убедитесь, что ",[51,4398,4399],{},"VmRSS"," не превышает ",[51,4402,564],{},[16,4404,4406],{"id":4405},"возможные-проблемы","Возможные проблемы",[381,4408,4410,4411],{"id":4409},"проблема-сервис-не-стартует-или-падает-сразу-после-daemon-reload","Проблема: Сервис не стартует или падает сразу после ",[51,4412,4413],{},"daemon-reload",[21,4415,4416,4419,4420,863,4423,3758,4426,4429,4430,4433,4434,372],{},[24,4417,4418],{},"Причина:"," Синтаксическая ошибка в конфигурационном файле ",[51,4421,4422],{},".service",[51,4424,4425],{},".slice",[24,4427,4428],{},"Решение:"," Проверьте корректность INI-файла. Используйте ",[51,4431,4432],{},"sudo systemctl status myapp.service"," — в выводе будет указана строка с ошибкой разбора. Также можно проверить синтаксис командой ",[51,4435,4436],{},"sudo systemd-analyze verify /etc/systemd/system/myapp.service",[381,4438,4440,4441,4443],{"id":4439},"проблема-ограничения-memorymax-игнорируются-процесс-использует-больше-памяти","Проблема: Ограничения ",[51,4442,564],{}," игнорируются, процесс использует больше памяти",[21,4445,4446,4449,4450,4452,4453,4455,4456,3758,4458,4460,4461,4464],{},[24,4447,4448],{},"Причина 1:"," Включён ",[51,4451,576],{},", и система активно использует swap. Ограничение ",[51,4454,564],{}," работает только по RAM, а общий лимит (RAM+Swap) задаётся ",[51,4457,576],{},[24,4459,4428],{}," Установите ",[51,4462,4463],{},"MemorySwapMax=0",", чтобы запретить использование swap для этого сервиса, или увеличьте оба лимита.",[21,4466,4467,4470,4471,4473,4474,863,4477,4480],{},[24,4468,4469],{},"Причина 2:"," Процесс запущен не от systemd (например, вручную из shell), а вы настраиваете юнит.\n",[24,4472,4428],{}," Убедитесь, что процесс является дочерним по отношению к юниту systemd. Используйте ",[51,4475,4476],{},"pstree -p | grep myapp",[51,4478,4479],{},"systemctl status myapp.service"," — там должен быть список PID процессов.",[381,4482,4484,4485,4488],{"id":4483},"проблема-cpuquota50-не-ограничивает-процесс-до-50-одного-ядра","Проблема: ",[51,4486,4487],{},"CPUQuota=50%"," не ограничивает процесс до 50% одного ядра",[21,4490,4491,4493,4494,4497,4498,4501,4502,4504,4505,4508,4509,4511,4512,182,4515,4518],{},[24,4492,4418],{}," На многопроцессорной системе (например, 8 ядер) 50% от ",[1553,4495,4496],{},"всех"," ядер — это 4 ядра. Если вы хотите ограничить процесс половиной ",[1553,4499,4500],{},"одного"," ядра, нужно указать ",[51,4503,4487],{}," и убедиться, что ",[51,4506,4507],{},"AllowedCPUs"," не настроен. Если нужно именно \"поляра\", то это 100% от одного ядра. Проценты считаются от суммарной мощности всех доступных ядер.\n",[24,4510,4428],{}," Пересчитайте нужное значение. Для строгого ограничения одним ядром используйте ",[51,4513,4514],{},"CPUQuota=100%",[51,4516,4517],{},"AllowedCPUs=0-0"," (если нужно только ядро 0).",[381,4520,4522,4523],{"id":4521},"проблема-ошибка-failed-to-set-property-permission-denied-при-set-property","Проблема: Ошибка \"Failed to set property: Permission denied\" при ",[51,4524,4525],{},"set-property",[21,4527,4528,4530,4531,4533,4534,4536,4537,4539,4540,372],{},[24,4529,4418],{}," Вы пытаетесь изменить свойство, которое может быть установлено только в конфигурационном файле (некоторые свойства \"immutable\" после старта службы), или у вас недостаточно прав.\n",[24,4532,4428],{}," Используйте ",[51,4535,604],{},". Если свойство действительно нельзя менять \"на лету\", внесите изменение в файл юнита и выполните ",[51,4538,4413],{}," + ",[51,4541,4542],{},"restart",[374,4544],{},[16,4546,4548],{"id":4547},"продвинутый-пример-создание-слота-для-группировки-контейнеров","Продвинутый пример: Создание слота для группировки контейнеров",[21,4550,4551,4552,4554,4555,4558,4559,863,4561,4564],{},"Допустим, вы запускаете несколько Docker-контейнеров, но хотите, чтобы они не \"съедали\" все ресурсы сервера. Docker по умолчанию использует свой собственный cgroup-драйвер, но если вы настроили Docker на использование ",[51,4553,3739],{}," (через ",[51,4556,4557],{},"--exec-opt native.cgroupdriver=systemd","), то каждый контейнер станет дочерним ",[51,4560,3936],{},[51,4562,4563],{},"docker.slice",". Вы можете создать отдельный слот для группы контейнеров:",[91,4566,4567,4601,4607],{},[35,4568,2983,4569,98,4572],{},[51,4570,4571],{},"/etc/systemd/system/containers.slice",[100,4573,4575],{"className":457,"code":4574,"language":459,"meta":105,"style":105},"[Slice]\nDescription=Slice для изоляции контейнеров\n# Ограничим всю группу контейнеров 4 ядрами и 8 ГБ RAM\nCPUQuota=400%\nMemoryMax=8G\n",[51,4576,4577,4581,4586,4591,4596],{"__ignoreMap":105},[109,4578,4579],{"class":111,"line":112},[109,4580,3947],{},[109,4582,4583],{"class":111,"line":297},[109,4584,4585],{},"Description=Slice для изоляции контейнеров\n",[109,4587,4588],{"class":111,"line":343},[109,4589,4590],{},"# Ограничим всю группу контейнеров 4 ядрами и 8 ГБ RAM\n",[109,4592,4593],{"class":111,"line":544},[109,4594,4595],{},"CPUQuota=400%\n",[109,4597,4598],{"class":111,"line":550},[109,4599,4600],{},"MemoryMax=8G\n",[35,4602,4603,4604,372],{},"Перезагрузите systemd: ",[51,4605,4606],{},"sudo systemctl daemon-reload",[35,4608,4609,4610,4613,4614,4639,4641,4642,4645],{},"При запуске контейнера через ",[51,4611,4612],{},"docker run"," укажите, в какой cgroup его поместить (это поддерживается Docker с systemd-драйвером):",[100,4615,4617],{"className":102,"code":4616,"language":104,"meta":105,"style":105},"docker run -d --name my_container --cgroup-parent=containers.slice nginx:alpine\n",[51,4618,4619],{"__ignoreMap":105},[109,4620,4621,4623,4625,4627,4630,4633,4636],{"class":111,"line":112},[109,4622,958],{"class":115},[109,4624,961],{"class":130},[109,4626,964],{"class":126},[109,4628,4629],{"class":126}," --name",[109,4631,4632],{"class":130}," my_container",[109,4634,4635],{"class":126}," --cgroup-parent=containers.slice",[109,4637,4638],{"class":130}," nginx:alpine\n",[133,4640],{},"Теперь все процессы в этом контейнере будут в ",[51,4643,4644],{},"containers.slice",", и их суммарное потребление не превысит заданных лимитов.",[16,4647,4649],{"id":4648},"заключение-не-добавлять-как-заголовок-просто-завершить-текст","Заключение (не добавлять как заголовок, просто завершить текст)",[21,4651,4652,4653,4655],{},"Вы освоили ключевые механизмы управления ресурсами через systemd и cgroups. Этот подход интегрирован в ОС и не требует установки дополнительного ПО. Помните, что слишком жёсткие лимиты могут привести к падению служб (OOM-киллер, троттлинг CPU), поэтому тестируйте конфигурации в staging-среде. Для более сложных сценариев (например, сетевые лимиты) изучайте дополнительные директивы в ",[51,4654,4075],{}," и документацию ядра по cgroups v2.",[1143,4657,4658],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":105,"searchDepth":297,"depth":297,"links":4660},[4661,4662,4663,4664,4665,4666,4667,4668,4678,4679],{"id":3673,"depth":297,"text":3674},{"id":3719,"depth":297,"text":3720},{"id":3795,"depth":297,"text":3796},{"id":3895,"depth":297,"text":3896},{"id":4039,"depth":297,"text":4040},{"id":4154,"depth":297,"text":4155},{"id":4235,"depth":297,"text":4236},{"id":4405,"depth":297,"text":4406,"children":4669},[4670,4672,4674,4676],{"id":4409,"depth":343,"text":4671},"Проблема: Сервис не стартует или падает сразу после daemon-reload",{"id":4439,"depth":343,"text":4673},"Проблема: Ограничения MemoryMax игнорируются, процесс использует больше памяти",{"id":4483,"depth":343,"text":4675},"Проблема: CPUQuota=50% не ограничивает процесс до 50% одного ядра",{"id":4521,"depth":343,"text":4677},"Проблема: Ошибка \"Failed to set property: Permission denied\" при set-property",{"id":4547,"depth":297,"text":4548},{"id":4648,"depth":297,"text":4649},"2026-02-16 19:28:19","Пошаговое руководство по настройке control groups в systemd. Ограничивайте CPU, память и I/O для процессов без сторонних инструментов. Готовые примеры конфигураций.","20-30 мин",[4684,4687,4690,4693],{"question":4685,"answer":4686},"Чем cgroups в systemd отличаются от классических cgroups v1?","Systemd использует cgroups v2 (если ядро поддерживает) или управляет иерархией v1 через единый контроллер. Главное отличие — более простая и централизованная настройка через юниты, без ручного монтажа в /sys/fs/cgroup.",{"question":4688,"answer":4689},"Почему мои настройки MemoryMax не применяются?","Чаще всего это происходит из-за конфликта с другими ограничителями (например, MemorySwapMax) или потому, что юнит был перезапущен без перезагрузки systemd. Всегда используйте `systemctl daemon-reload` после изменения файла юнита.",{"question":4691,"answer":4692},"Можно ли управлять cgroups для уже запущенного процесса?","Да, через `systemctl set-property --runtime`. Но это временное решение. Для постоянного управления процесс должен быть обёрнут в systemd-юнит (service, scope, slice).",{"question":4694,"answer":4695},"Что такое slice и зачем он нужен?","Slice — это cgroup-контейнер для группировки процессов (например, `system.slice` для системных сервисов). Создавая свой slice, вы можете задать лимиты ресурсов для целой группы юнитов, а не для каждого по отдельности.",[4697,4700,4703,4706,4709],{"name":4698,"text":4699},"Проверьте версию systemd и поддержку cgroups v2","Убедитесь, что ваша система использует systemd 235+ и ядро с поддержкой cgroups v2 (рекомендуется). Выполните команды для проверки.",{"name":4701,"text":4702},"Создайте кастомный slice для группировки сервисов","Создайте конфигурационный файл для нового слота (например, `myapp.slice`), который будет служить родительской cgroup для ваших приложений.",{"name":4704,"text":4705},"Настройте ограничения ресурсов для юнита (сервиса)","Добавьте директивы `MemoryMax`, `CPUQuota`, `IOWeight` в секцию `[Service]` файла вашего сервиса или в конфиг слота.",{"name":4707,"text":4708},"Перезагрузите конфигурацию systemd и примените настройки","Выполните `systemctl daemon-reload`, затем перезапустите целевой сервис или слот для вступления изменений в силу.",{"name":4710,"text":4711},"Убедитесь, что ограничения работают","Используйте `systemctl status`, `systemd-cgtop` и просмотр файлов в `/sys/fs/cgroup/` для проверки применённых лимитов и текущего потребления.","PT25M",[4714,4715,4716,4717,4718,4719,4720,4721],"systemd cgroups","управление ресурсами linux","ограничение памяти systemd","cpu quota systemd","control groups linux","systemd slice scope","как создать cgroup","systemd-resource-control",{},[4724,4725,4726],"/guides/linux/systemd-journal","/guides/linux/systemd-service-files","/errors/linux/systemd-failed-to-start",{"title":3663,"description":4681},"guides/linux/systemd-cgroups","Этот гайд подробно объясняет, как использовать встроенные возможности systemd для создания и управления cgroups (control groups). Вы научитесь ограничивать ресурсы (CPU, память, дисковый I/O) для отдельных сервисов или групп процессов, что критично для стабильности сервера и изоляции рабочих нагрузок.",[3739,1231,1215,1229,4731,3659],"ресурсы","zZzxcW3rf6azgs7IUC_0NKOR74bLCdCzLUP3k27IwgM"]