[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/linux/memory-leak-debug":3,"mdc-nhghrn-key":641,"mdc--v2fuxk-key":676,"mdc-oyjyoe-key":726,"mdc--3zzy2c-key":750,"mdc-plumyw-key":758,"mdc-m7svzn-key":795,"mdc-4zmuj-key":827,"mdc--8cj2o4-key":844,"mdc--evp4at-key":860,"related-/guides/linux/memory-usage-monitoring,/guides/linux/process-optimization,/errors/linux/oom-killer":902},{"id":4,"title":5,"appliesTo":6,"author":11,"body":12,"canonical":575,"code":83,"createdAt":576,"description":577,"difficulty":578,"draft":579,"estimatedTime":580,"extension":581,"faq":582,"howToSteps":595,"howToTotalTime":611,"image":575,"keywords":612,"locale":621,"meta":622,"navigation":623,"path":624,"platform":625,"related":626,"section":630,"seo":631,"severity":83,"stem":632,"summary":633,"tags":634,"twitterCreator":575,"twitterSite":575,"type":639,"updatedAt":576,"__hash__":640},"content_ru/guides/linux/memory-leak-debug.md","Как обнаружить и устранить утечку памяти в Linux за 10 минут",[7,8,9,10],"Ubuntu 20.04 LTS","Ubuntu 22.04 LTS","Debian 11","Fedora 36","FixPedia Team",{"type":13,"value":14,"toc":562},"minimark",[15,20,24,28,65,69,74,77,120,123,141,155,159,162,178,185,216,223,227,230,263,274,278,281,308,315,319,343,356,369,416,427,430,434,437,449,455,458,500,504,555,558],[16,17,19],"h2",{"id":18},"введение-зачем-это-нужно","Введение / Зачем это нужно",[21,22,23],"p",{},"Утечка памяти — это ситуация, когда программа выделяет память, но не освобождает её обратно, что со временем приводит к замедлению работы, сбоям или даже краху процесса. В Linux подобные проблемы становятся критическими при работе с долгоживущими сервисами, контейнерами или ботами. Быстрое выявление и исправление утечек позволяет сохранить производительность, продлить срок службы приложения и избежать потери ресурсов.",[16,25,27],{"id":26},"требования-подготовка","Требования / Подготовка",[29,30,31,35,43],"ul",{},[32,33,34],"li",{},"ОС: Ubuntu 20.04+, Debian 11, Fedora 36 или любая современная дистрибутива Linux.",[32,36,37,38,42],{},"Права: необязательны, но для системных утилит могут потребоваться права администратора (",[39,40,41],"code",{},"sudo",").",[32,44,45,46,49,50,53,54,53,57,60,61,64],{},"Установленные инструменты: ",[39,47,48],{},"gcc/g++"," (если компилируете код), ",[39,51,52],{},"valgrind",", ",[39,55,56],{},"strace",[39,58,59],{},"gdb"," (необязательно), ",[39,62,63],{},"python3-memory-profiler"," (для Python).",[16,66,68],{"id":67},"пошаговая-инструкция","Пошаговая инструкция",[70,71,73],"h3",{"id":72},"шаг-1-установите-инструменты-диагностики","Шаг 1: Установите инструменты диагностики",[21,75,76],{},"Для начала установите необходимые инструменты диагностики:",[78,79,84],"pre",{"className":80,"code":81,"language":82,"meta":83,"style":83},"language-bash shiki shiki-themes github-light github-dark","sudo apt update\nsudo apt install valgrind gdb python3-memory-profiler\n","bash","",[39,85,86,101],{"__ignoreMap":83},[87,88,91,94,98],"span",{"class":89,"line":90},"line",1,[87,92,41],{"class":93},"sScJk",[87,95,97],{"class":96},"sZZnC"," apt",[87,99,100],{"class":96}," update\n",[87,102,104,106,108,111,114,117],{"class":89,"line":103},2,[87,105,41],{"class":93},[87,107,97],{"class":96},[87,109,110],{"class":96}," install",[87,112,113],{"class":96}," valgrind",[87,115,116],{"class":96}," gdb",[87,118,119],{"class":96}," python3-memory-profiler\n",[21,121,122],{},"На Fedora:",[78,124,126],{"className":80,"code":125,"language":82,"meta":83,"style":83},"sudo dnf install valgrind python3-memory-profiler\n",[39,127,128],{"__ignoreMap":83},[87,129,130,132,135,137,139],{"class":89,"line":90},[87,131,41],{"class":93},[87,133,134],{"class":96}," dnf",[87,136,110],{"class":96},[87,138,113],{"class":96},[87,140,119],{"class":96},[142,143,144],"blockquote",{},[21,145,146,150,151,154],{},[147,148,149],"strong",{},"💡 Совет:"," Установите отладочные символы (",[39,152,153],{},"debuginfo","), чтобы трассировка была более точной.",[70,156,158],{"id":157},"шаг-2-запустите-программу-под-valgrind","Шаг 2: Запустите программу под valgrind",[21,160,161],{},"Запустите приложение с помощью инструмента Massif, который отслеживает динамическое выделение памяти:",[78,163,165],{"className":80,"code":164,"language":82,"meta":83,"style":83},"valgrind --tool=massif ./your_program\n",[39,166,167],{"__ignoreMap":83},[87,168,169,171,175],{"class":89,"line":90},[87,170,52],{"class":93},[87,172,174],{"class":173},"sj4cs"," --tool=massif",[87,176,177],{"class":96}," ./your_program\n",[21,179,180,181,184],{},"valgrind создаст файл ",[39,182,183],{},"massif.out.\u003Cpid>",". Проанализируйте его:",[78,186,188],{"className":80,"code":187,"language":82,"meta":83,"style":83},"ms_print massif.out.\u003Cpid>   # простой текстовый отчёт\n",[39,189,190],{"__ignoreMap":83},[87,191,192,195,198,202,205,209,212],{"class":89,"line":90},[87,193,194],{"class":93},"ms_print",[87,196,197],{"class":96}," massif.out.",[87,199,201],{"class":200},"szBVR","\u003C",[87,203,204],{"class":96},"pi",[87,206,208],{"class":207},"sVt8B","d",[87,210,211],{"class":200},">",[87,213,215],{"class":214},"sJ8bj","   # простой текстовый отчёт\n",[21,217,218,219,222],{},"Для визуализации используйте ",[39,220,221],{},"gmmsa"," или любой другой визуализатор.",[70,224,226],{"id":225},"шаг-3-используйте-strace-для-отслеживания-выделений","Шаг 3: Используйте strace для отслеживания выделений",[21,228,229],{},"Отслеживайте системные вызовы, связанные с выделением памяти:",[78,231,233],{"className":80,"code":232,"language":82,"meta":83,"style":83},"strace -ff -e mmap,brk ./your_program 2>&1 | grep 'mmap'\n",[39,234,235],{"__ignoreMap":83},[87,236,237,239,242,245,248,251,254,257,260],{"class":89,"line":90},[87,238,56],{"class":93},[87,240,241],{"class":173}," -ff",[87,243,244],{"class":173}," -e",[87,246,247],{"class":96}," mmap,brk",[87,249,250],{"class":96}," ./your_program",[87,252,253],{"class":200}," 2>&1",[87,255,256],{"class":200}," |",[87,258,259],{"class":93}," grep",[87,261,262],{"class":96}," 'mmap'\n",[21,264,265,266,269,270,273],{},"Обратите внимание на вызовы ",[39,267,268],{},"mmap","/",[39,271,272],{},"brk",", которые не сопряжены с последующим освобождением.",[70,275,277],{"id":276},"шаг-4-проверьте-рост-rss-с-помощью-монитора","Шаг 4: Проверьте рост RSS с помощью монитора",[21,279,280],{},"Запустите программу в фоновом режиме и наблюдайте за её RSS в реальном времени:",[78,282,284],{"className":80,"code":283,"language":82,"meta":83,"style":83},"./your_program &\nwatch -n 1 'ps -C your_program -o pid,rss'\n",[39,285,286,294],{"__ignoreMap":83},[87,287,288,291],{"class":89,"line":90},[87,289,290],{"class":93},"./your_program",[87,292,293],{"class":207}," &\n",[87,295,296,299,302,305],{"class":89,"line":103},[87,297,298],{"class":93},"watch",[87,300,301],{"class":173}," -n",[87,303,304],{"class":173}," 1",[87,306,307],{"class":96}," 'ps -C your_program -o pid,rss'\n",[21,309,310,311,314],{},"Постоянный рост ",[39,312,313],{},"rss"," (при отсутствии фоновых задач) указывает на утечку.",[70,316,318],{"id":317},"шаг-5-исправьте-обнаруженную-утечку","Шаг 5: Исправьте обнаруженную утечку",[21,320,321,324,325,53,328,53,331,334,335,338,339,342],{},[147,322,323],{},"Для C/C++:"," Проверьте каждый вызов ",[39,326,327],{},"malloc",[39,329,330],{},"calloc",[39,332,333],{},"realloc"," на наличие соответствующего ",[39,336,337],{},"free",". Используйте статический анализатор, например ",[39,340,341],{},"clang-analyzer",":",[78,344,346],{"className":80,"code":345,"language":82,"meta":83,"style":83},"scan-build make\n",[39,347,348],{"__ignoreMap":83},[87,349,350,353],{"class":89,"line":90},[87,351,352],{"class":93},"scan-build",[87,354,355],{"class":96}," make\n",[21,357,358,361,362,365,366,342],{},[147,359,360],{},"Для Python:"," Используйте ",[39,363,364],{},"tracemalloc"," или ",[39,367,368],{},"memory_profiler",[78,370,374],{"className":371,"code":372,"language":373,"meta":83,"style":83},"language-python shiki shiki-themes github-light github-dark","import tracemalloc\ntracemalloc.start()\n# ваш код\nsnapshot = tracemalloc.take_snapshot()\ntop_stats = snapshot.statistics('lineno')\nfor stat in top_stats[:10]:\n    print(stat)\n","python",[39,375,376,381,386,392,398,404,410],{"__ignoreMap":83},[87,377,378],{"class":89,"line":90},[87,379,380],{},"import tracemalloc\n",[87,382,383],{"class":89,"line":103},[87,384,385],{},"tracemalloc.start()\n",[87,387,389],{"class":89,"line":388},3,[87,390,391],{},"# ваш код\n",[87,393,395],{"class":89,"line":394},4,[87,396,397],{},"snapshot = tracemalloc.take_snapshot()\n",[87,399,401],{"class":89,"line":400},5,[87,402,403],{},"top_stats = snapshot.statistics('lineno')\n",[87,405,407],{"class":89,"line":406},6,[87,408,409],{},"for stat in top_stats[:10]:\n",[87,411,413],{"class":89,"line":412},7,[87,414,415],{},"    print(stat)\n",[21,417,418,419,422,423,426],{},"Освободите неиспользуемые объекты (",[39,420,421],{},"del","), удалите циклические ссылки или используйте ",[39,424,425],{},"weakref",".",[428,429],"in-article-ad",{},[16,431,433],{"id":432},"проверка-результата","Проверка результата",[21,435,436],{},"После внесения исправлений запустите диагностику повторно:",[78,438,439],{"className":80,"code":164,"language":82,"meta":83,"style":83},[39,440,441],{"__ignoreMap":83},[87,442,443,445,447],{"class":89,"line":90},[87,444,52],{"class":93},[87,446,174],{"class":173},[87,448,177],{"class":96},[21,450,451,452,454],{},"Если файл Massif показывает стабильное потребление памяти, или ",[39,453,298],{}," отображает неизменный RSS, утечка устранена.",[21,456,457],{},"Для гарантированной проверки выполните цикл из многих итераций (например, 1000 запусков) и наблюдайте за средним ростом памяти:",[78,459,461],{"className":80,"code":460,"language":82,"meta":83,"style":83},"for i in {1..1000}; do ./your_program; done | valgrind --tool=massif\n",[39,462,463],{"__ignoreMap":83},[87,464,465,468,471,474,477,480,483,486,488,490,493,495,497],{"class":89,"line":90},[87,466,467],{"class":200},"for",[87,469,470],{"class":207}," i ",[87,472,473],{"class":200},"in",[87,475,476],{"class":207}," {",[87,478,479],{"class":93},"1..1000}",[87,481,482],{"class":207},"; ",[87,484,485],{"class":200},"do",[87,487,250],{"class":93},[87,489,482],{"class":207},[87,491,492],{"class":200},"done",[87,494,256],{"class":200},[87,496,113],{"class":93},[87,498,499],{"class":173}," --tool=massif\n",[16,501,503],{"id":502},"возможные-проблемы","Возможные проблемы",[29,505,506,519,529,539],{},[32,507,508,511,512,515,516,42],{},[147,509,510],{},"Нет отладочных символов:"," valgrind может не отобразить точное местоположение утечки. Скомпилируйте программу с ",[39,513,514],{},"-g"," и без оптимизаций (",[39,517,518],{},"-O0",[32,520,521,524,525,528],{},[147,522,523],{},"Сложные паттерны (например, GC в Python):"," иногда утечка скрыта в модулях третьих сторон. Используйте ",[39,526,527],{},"objgraph",", чтобы визуализировать объекты.",[32,530,531,534,535,538],{},[147,532,533],{},"Потоки и мьютексы:"," утечка может происходить из-за неправильного освобождения ресурсов в потоках. Запустите программу с ",[39,536,537],{},"strace -f",", чтобы отследить все дочерние процессы.",[32,540,541,547,548,550,551,554],{},[147,542,543,544,546],{},"Память, выделенная через ",[39,545,268],{}," напрямую:"," не все выделения проходят через ",[39,549,327],{},". Используйте ",[39,552,553],{},"cat /proc/\u003Cpid>/maps",", чтобы увидеть все отображённые регионы.",[21,556,557],{},"Следуйте этим шагам, и вы сможете быстро выявить и устранить большинство утечек памяти в Linux-среде. Удачной отладки!",[559,560,561],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}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 .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 .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":83,"searchDepth":103,"depth":103,"links":563},[564,565,566,573,574],{"id":18,"depth":103,"text":19},{"id":26,"depth":103,"text":27},{"id":67,"depth":103,"text":68,"children":567},[568,569,570,571,572],{"id":72,"depth":388,"text":73},{"id":157,"depth":388,"text":158},{"id":225,"depth":388,"text":226},{"id":276,"depth":388,"text":277},{"id":317,"depth":388,"text":318},{"id":432,"depth":103,"text":433},{"id":502,"depth":103,"text":503},null,"2026-07-29 14:57:38","Пошаговое руководство по обнаружению, диагностике и исправлению утечек памяти в Linux с использованием valgrind, strace и инструментов системного мониторинга.","medium",false,"10-15 мин","md",[583,586,589,592],{"question":584,"answer":585},"Как понять, что в Linux-программе происходит утечка памяти?","Наблюдайте за ростом использования памяти процессе с течением времени, запустите программу с помощью `top`/`htop` и сравните показания `ps -o rss` перед и после её выполнения.",{"question":587,"answer":588},"Можно ли автоматически обнаружить утечку без valgrind?","Да, используйте инструменты типа `memstat`, `massif` из valgrind или `strace` для отслеживания системных вызовов `brk`/`mmap`, а также мониторьте RSS с помощью `watch`.",{"question":590,"answer":591},"Что делать, если утечка вызвана кодом на Python?","Запустите программу с `python -m memory_profiler` или используйте `tracemalloc`, чтобы найти строку, которая выделяет больше всего памяти.",{"question":593,"answer":594},"Как предотвратить утечку памяти в будущем?","Используйте статическую анализацию (clang-analyzer), пишите код с учетом RAII в C/C++, освобождайте выделенную память своевременно и проводите регулярное профилирование производительности.",[596,599,602,605,608],{"name":597,"text":598},"Установите инструменты диагностики","Установите `valgrind`, `glibc` с отладочными символами и `python3-memory-profiler`, если нужно. В Ubuntu выполните `sudo apt install valgrind gdb python3-memory-profiler`.",{"name":600,"text":601},"Запустите программу под valgrind","Выполните команду `valgrind --tool=massif ./your_program`, чтобы получить детальный отчёт о потреблении памяти. Анализируйте файл `massif.out.12345` с помощью `ms_print` или визуализатора.",{"name":603,"text":604},"Используйте strace для отслеживания выделений","Запустите `strace -ff -e mmap,brk ./your_program 2>&1 | grep 'mmap'` — это покажет все вызовы системных функций выделения памяти и поможет выявить незакрытые ресурсы.",{"name":606,"text":607},"Проверьте рост RSS с помощью монитора","Запустите `watch -n 1 'ps -C your_program -o pid,rss'` рядом с программой. Постоянный рост RSS указывает на утечку.",{"name":609,"text":610},"Исправьте обнаруженную утечку","Для утечек в C/C++ убедитесь, что каждая `malloc`/`calloc`/`realloc` имеет соответствующий `free`. В Python освободите объекты, удалите ссылки и используйте `del`, если это необходимо.","PT12M",[613,614,615,616,617,618,619,620],"отладка утечки памяти linux","memory leak linux debug","valgrind linux пример","утечка памяти в приложении linux","инструменты диагностики памяти linux","статистика использования памяти linux","команды для обнаружения утечки памяти","лечение утечки памяти linux","ru_RU",{},true,"/guides/linux/memory-leak-debug","linux",[627,628,629],"/guides/linux/memory-usage-monitoring","/guides/linux/process-optimization","/errors/linux/oom-killer","Гайды Linux",{"title":5,"description":577},"guides/linux/memory-leak-debug","В этой статье вы узнаете, как быстро выявить утечку памяти в приложениях под Linux, использовать стандартные инструменты отладки и применить практические решения для её устранения.",[635,636,637,638],"Linux","debugging","memory-management","performance","guide","NeJGqsKJYGRNz8wEQFlq-xRo8N2RTNe0TdD_x9YX5t4",{"data":642,"body":643},{},{"type":644,"children":645},"root",[646],{"type":647,"tag":21,"props":648,"children":649},"element",{},[650,653,659,660,666,668,674],{"type":651,"value":652},"text","Наблюдайте за ростом использования памяти процессе с течением времени, запустите программу с помощью ",{"type":647,"tag":39,"props":654,"children":656},{"className":655},[],[657],{"type":651,"value":658},"top",{"type":651,"value":269},{"type":647,"tag":39,"props":661,"children":663},{"className":662},[],[664],{"type":651,"value":665},"htop",{"type":651,"value":667}," и сравните показания ",{"type":647,"tag":39,"props":669,"children":671},{"className":670},[],[672],{"type":651,"value":673},"ps -o rss",{"type":651,"value":675}," перед и после её выполнения.",{"data":677,"body":678},{},{"type":644,"children":679},[680],{"type":647,"tag":21,"props":681,"children":682},{},[683,685,691,692,698,700,705,707,712,713,718,720,725],{"type":651,"value":684},"Да, используйте инструменты типа ",{"type":647,"tag":39,"props":686,"children":688},{"className":687},[],[689],{"type":651,"value":690},"memstat",{"type":651,"value":53},{"type":647,"tag":39,"props":693,"children":695},{"className":694},[],[696],{"type":651,"value":697},"massif",{"type":651,"value":699}," из valgrind или ",{"type":647,"tag":39,"props":701,"children":703},{"className":702},[],[704],{"type":651,"value":56},{"type":651,"value":706}," для отслеживания системных вызовов ",{"type":647,"tag":39,"props":708,"children":710},{"className":709},[],[711],{"type":651,"value":272},{"type":651,"value":269},{"type":647,"tag":39,"props":714,"children":716},{"className":715},[],[717],{"type":651,"value":268},{"type":651,"value":719},", а также мониторьте RSS с помощью ",{"type":647,"tag":39,"props":721,"children":723},{"className":722},[],[724],{"type":651,"value":298},{"type":651,"value":426},{"data":727,"body":728},{},{"type":644,"children":729},[730],{"type":647,"tag":21,"props":731,"children":732},{},[733,735,741,743,748],{"type":651,"value":734},"Запустите программу с ",{"type":647,"tag":39,"props":736,"children":738},{"className":737},[],[739],{"type":651,"value":740},"python -m memory_profiler",{"type":651,"value":742}," или используйте ",{"type":647,"tag":39,"props":744,"children":746},{"className":745},[],[747],{"type":651,"value":364},{"type":651,"value":749},", чтобы найти строку, которая выделяет больше всего памяти.",{"data":751,"body":752},{},{"type":644,"children":753},[754],{"type":647,"tag":21,"props":755,"children":756},{},[757],{"type":651,"value":594},{"data":759,"body":760},{},{"type":644,"children":761},[762],{"type":647,"tag":21,"props":763,"children":764},{},[765,767,772,773,779,781,786,788,794],{"type":651,"value":766},"Установите ",{"type":647,"tag":39,"props":768,"children":770},{"className":769},[],[771],{"type":651,"value":52},{"type":651,"value":53},{"type":647,"tag":39,"props":774,"children":776},{"className":775},[],[777],{"type":651,"value":778},"glibc",{"type":651,"value":780}," с отладочными символами и ",{"type":647,"tag":39,"props":782,"children":784},{"className":783},[],[785],{"type":651,"value":63},{"type":651,"value":787},", если нужно. В Ubuntu выполните ",{"type":647,"tag":39,"props":789,"children":791},{"className":790},[],[792],{"type":651,"value":793},"sudo apt install valgrind gdb python3-memory-profiler",{"type":651,"value":426},{"data":796,"body":797},{},{"type":644,"children":798},[799],{"type":647,"tag":21,"props":800,"children":801},{},[802,804,810,812,818,820,825],{"type":651,"value":803},"Выполните команду ",{"type":647,"tag":39,"props":805,"children":807},{"className":806},[],[808],{"type":651,"value":809},"valgrind --tool=massif ./your_program",{"type":651,"value":811},", чтобы получить детальный отчёт о потреблении памяти. Анализируйте файл ",{"type":647,"tag":39,"props":813,"children":815},{"className":814},[],[816],{"type":651,"value":817},"massif.out.12345",{"type":651,"value":819}," с помощью ",{"type":647,"tag":39,"props":821,"children":823},{"className":822},[],[824],{"type":651,"value":194},{"type":651,"value":826}," или визуализатора.",{"data":828,"body":829},{},{"type":644,"children":830},[831],{"type":647,"tag":21,"props":832,"children":833},{},[834,836,842],{"type":651,"value":835},"Запустите ",{"type":647,"tag":39,"props":837,"children":839},{"className":838},[],[840],{"type":651,"value":841},"strace -ff -e mmap,brk ./your_program 2>&1 | grep 'mmap'",{"type":651,"value":843}," — это покажет все вызовы системных функций выделения памяти и поможет выявить незакрытые ресурсы.",{"data":845,"body":846},{},{"type":644,"children":847},[848],{"type":647,"tag":21,"props":849,"children":850},{},[851,852,858],{"type":651,"value":835},{"type":647,"tag":39,"props":853,"children":855},{"className":854},[],[856],{"type":651,"value":857},"watch -n 1 'ps -C your_program -o pid,rss'",{"type":651,"value":859}," рядом с программой. Постоянный рост RSS указывает на утечку.",{"data":861,"body":862},{},{"type":644,"children":863},[864],{"type":647,"tag":21,"props":865,"children":866},{},[867,869,874,875,880,881,886,888,893,895,900],{"type":651,"value":868},"Для утечек в C/C++ убедитесь, что каждая ",{"type":647,"tag":39,"props":870,"children":872},{"className":871},[],[873],{"type":651,"value":327},{"type":651,"value":269},{"type":647,"tag":39,"props":876,"children":878},{"className":877},[],[879],{"type":651,"value":330},{"type":651,"value":269},{"type":647,"tag":39,"props":882,"children":884},{"className":883},[],[885],{"type":651,"value":333},{"type":651,"value":887}," имеет соответствующий ",{"type":647,"tag":39,"props":889,"children":891},{"className":890},[],[892],{"type":651,"value":337},{"type":651,"value":894},". В Python освободите объекты, удалите ссылки и используйте ",{"type":647,"tag":39,"props":896,"children":898},{"className":897},[],[899],{"type":651,"value":421},{"type":651,"value":901},", если это необходимо.",[903,1668],{"id":904,"title":905,"appliesTo":906,"author":11,"body":911,"canonical":575,"code":575,"createdAt":1613,"description":1614,"difficulty":1615,"draft":579,"estimatedTime":580,"extension":581,"faq":1616,"howToSteps":1629,"howToTotalTime":1645,"image":575,"keywords":1646,"locale":621,"meta":1656,"navigation":623,"path":627,"platform":625,"related":1657,"section":630,"seo":1661,"severity":575,"stem":1662,"summary":1663,"tags":1664,"twitterCreator":575,"twitterSite":575,"type":639,"updatedAt":1613,"__hash__":1667},"content_ru/guides/linux/memory-usage-monitoring.md","Мониторинг использования памяти в Linux: полное руководство",[907,908,909,910],"Ubuntu 20.04+","CentOS 7+","Debian 10+","Fedora 35+",{"type":13,"value":912,"toc":1590},[913,915,918,920,923,966,970,976,988,995,1002,1005,1030,1034,1042,1046,1049,1058,1086,1090,1095,1151,1166,1170,1175,1187,1190,1196,1199,1211,1222,1226,1232,1245,1248,1254,1257,1277,1283,1300,1302,1306,1314,1318,1358,1369,1373,1378,1421,1430,1432,1435,1478,1493,1495,1499,1508,1512,1533,1537,1557,1561,1576,1580,1587],[16,914,19],{"id":18},[21,916,917],{},"Постоянный мониторинг использования оперативной памяти (RAM) — критически важная задача для администраторов Linux и разработчиков, развертывающих приложения. Неконтролируемое потребление памяти может привести к замедлению системы, активному использованию swap-раздела и в худшем случае — к краху процессов (OOM Killer). Этот гайд поможет вам освоить набор встроенных и сторонних инструментов для быстрой оценки состояния памяти, выявления \"прожорливых\" процессов и принятия обоснованных решений по оптимизации.",[16,919,27],{"id":26},[21,921,922],{},"Перед началом убедитесь, что:",[29,924,925,928,931,945],{},[32,926,927],{},"У вас есть доступ к терминалу Linux (через SSH или локально).",[32,929,930],{},"Вы обладаете правами для выполнения команд (обычно достаточно обычного пользователя, но для установки дополнительных пакетов потребуются права sudo).",[32,932,933,934,53,936,53,938,53,941,944],{},"Большинство инструментов (",[39,935,337],{},[39,937,658],{},[39,939,940],{},"vmstat",[39,942,943],{},"/proc/meminfo",") уже предустановлены в любом дистрибутиве Linux.",[32,946,947,948,53,950,365,953,956,957,53,960,53,963,42],{},"Для установки ",[39,949,665],{},[39,951,952],{},"nmon",[39,954,955],{},"glances"," потребуется менеджер пакетов (",[39,958,959],{},"apt",[39,961,962],{},"yum",[39,964,965],{},"dnf",[16,967,969],{"id":968},"шаг-1-использование-команды-free","Шаг 1: Использование команды free",[21,971,972,973,975],{},"Команда ",[39,974,337],{}," — самый быстрый способ получить сводную картину по оперативной памяти и swap-разделу.",[78,977,979],{"className":80,"code":978,"language":82,"meta":83,"style":83},"free -h\n",[39,980,981],{"__ignoreMap":83},[87,982,983,985],{"class":89,"line":90},[87,984,337],{"class":93},[87,986,987],{"class":173}," -h\n",[21,989,990,991,994],{},"Ключ ",[39,992,993],{},"-h"," (human-readable) выводит значения в удобных единицах (МБ, ГБ). Пример вывода:",[78,996,1000],{"className":997,"code":999,"language":651},[998],"language-text","              total        used        free      shared  buff/cache   available\nMem:           7.7G        2.1G        3.2G        156M        2.4G        5.1G\nSwap:          2.0G          0B        2.0G\n",[39,1001,999],{"__ignoreMap":83},[21,1003,1004],{},"Обратите внимание на столбцы:",[29,1006,1007,1013,1018,1024],{},[32,1008,1009,1012],{},[147,1010,1011],{},"used",": память, используемая процессами (без учета кэшей).",[32,1014,1015,1017],{},[147,1016,337],{},": полностью неиспользуемая память.",[32,1019,1020,1023],{},[147,1021,1022],{},"buff/cache",": память, занятая буферизацией и кэшированием (ядро может освободить её при необходимости).",[32,1025,1026,1029],{},[147,1027,1028],{},"available",": оценка памяти, доступной для запуска новых процессов без swap. Это самый важный показатель.",[16,1031,1033],{"id":1032},"шаг-2-интерактивный-мониторинг-с-top-и-htop","Шаг 2: Интерактивный мониторинг с top и htop",[21,1035,1036,1037,1039,1040,426],{},"Для наблюдения за динамикой и выявления процессов, потребляющих много памяти, используйте ",[39,1038,658],{}," или более удобную альтернативу ",[39,1041,665],{},[70,1043,1045],{"id":1044},"использование-top","Использование top",[21,1047,1048],{},"Запустите:",[78,1050,1052],{"className":80,"code":1051,"language":82,"meta":83,"style":83},"top\n",[39,1053,1054],{"__ignoreMap":83},[87,1055,1056],{"class":89,"line":90},[87,1057,1051],{"class":93},[21,1059,1060,1061,1063,1064,1067,1068,1071,1072,1067,1075,1078,1079,1082,1083,426],{},"По умолчанию ",[39,1062,658],{}," сортирует по загрузке CPU. Чтобы сортировать по памяти, нажмите ",[39,1065,1066],{},"F"," (или ",[39,1069,1070],{},"f","), затем выберите столбец ",[39,1073,1074],{},"%MEM",[39,1076,1077],{},"RES"," для физической памяти) и нажмите ",[39,1080,1081],{},"s"," для сохранения. Для выхода нажмите ",[39,1084,1085],{},"q",[70,1087,1089],{"id":1088},"установка-и-использование-htop","Установка и использование htop",[21,1091,1092,1094],{},[39,1093,665],{}," предоставляет цветное интерфейс с удобным управлением:",[78,1096,1098],{"className":80,"code":1097,"language":82,"meta":83,"style":83},"# Для Ubuntu/Debian:\nsudo apt update && sudo apt install htop\n\n# Для CentOS/RHEL/Fedora:\nsudo yum install htop   # или sudo dnf install htop\n",[39,1099,1100,1105,1126,1131,1136],{"__ignoreMap":83},[87,1101,1102],{"class":89,"line":90},[87,1103,1104],{"class":214},"# Для Ubuntu/Debian:\n",[87,1106,1107,1109,1111,1114,1117,1119,1121,1123],{"class":89,"line":103},[87,1108,41],{"class":93},[87,1110,97],{"class":96},[87,1112,1113],{"class":96}," update",[87,1115,1116],{"class":207}," && ",[87,1118,41],{"class":93},[87,1120,97],{"class":96},[87,1122,110],{"class":96},[87,1124,1125],{"class":96}," htop\n",[87,1127,1128],{"class":89,"line":388},[87,1129,1130],{"emptyLinePlaceholder":623},"\n",[87,1132,1133],{"class":89,"line":394},[87,1134,1135],{"class":214},"# Для CentOS/RHEL/Fedora:\n",[87,1137,1138,1140,1143,1145,1148],{"class":89,"line":400},[87,1139,41],{"class":93},[87,1141,1142],{"class":96}," yum",[87,1144,110],{"class":96},[87,1146,1147],{"class":96}," htop",[87,1149,1150],{"class":214},"   # или sudo dnf install htop\n",[21,1152,835,1153,1155,1156,1159,1160,365,1163,1165],{},[39,1154,665],{},". Память отображается в виде цветных полос вверху (синий — used, зеленый — buff/cache). Для сортировки по памяти нажмите ",[39,1157,1158],{},"F6"," и выберите ",[39,1161,1162],{},"PERCENT_CPU",[39,1164,1077],{},", или просто кликните на заголовок столбца (если мышь поддерживается). Процессы, которые используют больше всего памяти, будут наверху.",[16,1167,1169],{"id":1168},"шаг-3-статистика-виртуальной-памяти-с-vmstat","Шаг 3: Статистика виртуальной памяти с vmstat",[21,1171,1172,1174],{},[39,1173,940],{}," дает общую статистику по системе, включая память, swap и операции ввода-вывода.",[78,1176,1178],{"className":80,"code":1177,"language":82,"meta":83,"style":83},"vmstat -s\n",[39,1179,1180],{"__ignoreMap":83},[87,1181,1182,1184],{"class":89,"line":90},[87,1183,940],{"class":93},[87,1185,1186],{"class":173}," -s\n",[21,1188,1189],{},"Вывод покажет детализированные цифры, например:",[78,1191,1194],{"className":1192,"code":1193,"language":651},[998],"  8192000 K total memory\n  2150400 K used memory\n  3901440 K active memory\n  1324544 K inactive memory\n  3176448 K free memory\n   123456 K buffer memory\n  2048000 K swap cache\n  2097152 K total swap\n        0 K used swap\n  2097152 K free swap\n",[39,1195,1193],{"__ignoreMap":83},[21,1197,1198],{},"Для непрерывного мониторинга с интервалом в 2 секунды:",[78,1200,1202],{"className":80,"code":1201,"language":82,"meta":83,"style":83},"vmstat 2\n",[39,1203,1204],{"__ignoreMap":83},[87,1205,1206,1208],{"class":89,"line":90},[87,1207,940],{"class":93},[87,1209,1210],{"class":173}," 2\n",[21,1212,1213,1214,1217,1218,1221],{},"Обращайте внимание на столбцы ",[39,1215,1216],{},"si"," (swap in) и ",[39,1219,1220],{},"so"," (swap out). Если они постоянно отличны от нуля, это признак нехватки оперативной памяти.",[16,1223,1225],{"id":1224},"шаг-4-детальная-информация-из-procmeminfo","Шаг 4: Детальная информация из /proc/meminfo",[21,1227,1228,1229,1231],{},"Файл ",[39,1230,943],{}," содержит наиболее подробные и низкоуровневые данные о памяти. Это текстовый файл, который можно читать напрямую:",[78,1233,1235],{"className":80,"code":1234,"language":82,"meta":83,"style":83},"cat /proc/meminfo\n",[39,1236,1237],{"__ignoreMap":83},[87,1238,1239,1242],{"class":89,"line":90},[87,1240,1241],{"class":93},"cat",[87,1243,1244],{"class":96}," /proc/meminfo\n",[21,1246,1247],{},"Пример вывода (сокращен):",[78,1249,1252],{"className":1250,"code":1251,"language":651},[998],"MemTotal:        8192000 kB\nMemFree:         3176448 kB\nMemAvailable:    5100000 kB\nBuffers:         123456 kB\nCached:          2048000 kB\nSwapCached:            0 kB\nActive:          3901440 kB\nInactive:        1324544 kB\nSwapTotal:      2097152 kB\nSwapFree:       2097152 kB\n",[39,1253,1251],{"__ignoreMap":83},[21,1255,1256],{},"Здесь:",[29,1258,1259,1265,1271],{},[32,1260,1261,1264],{},[147,1262,1263],{},"MemAvailable"," — наиболее точная оценка доступной памяти (учитывает кэши и буферы, которые можно быстро освободить).",[32,1266,1267,1270],{},[147,1268,1269],{},"Cached"," — память, используемая кэшем страниц (для ускорения чтения диска).",[32,1272,1273,1276],{},[147,1274,1275],{},"Buffers"," — память для буферизации блочных устройств (например, дисков).",[21,1278,1279,1280,342],{},"Для фильтрации конкретных полей можно использовать ",[39,1281,1282],{},"grep",[78,1284,1286],{"className":80,"code":1285,"language":82,"meta":83,"style":83},"grep -E 'MemTotal|MemFree|MemAvailable|Buffers|Cached' /proc/meminfo\n",[39,1287,1288],{"__ignoreMap":83},[87,1289,1290,1292,1295,1298],{"class":89,"line":90},[87,1291,1282],{"class":93},[87,1293,1294],{"class":173}," -E",[87,1296,1297],{"class":96}," 'MemTotal|MemFree|MemAvailable|Buffers|Cached'",[87,1299,1244],{"class":96},[428,1301],{},[16,1303,1305],{"id":1304},"шаг-5-расширенные-утилиты-nmon-и-glances","Шаг 5: Расширенные утилиты nmon и glances",[21,1307,1308,1309,1311,1312,426],{},"Для комплексного мониторинга системы, включая память, CPU, диски и сеть, удобны утилиты ",[39,1310,952],{}," и ",[39,1313,955],{},[70,1315,1317],{"id":1316},"установка-nmon","Установка nmon",[78,1319,1321],{"className":80,"code":1320,"language":82,"meta":83,"style":83},"# Ubuntu/Debian:\nsudo apt install nmon\n\n# CentOS/RHEL:\nsudo yum install nmon\n",[39,1322,1323,1328,1339,1343,1348],{"__ignoreMap":83},[87,1324,1325],{"class":89,"line":90},[87,1326,1327],{"class":214},"# Ubuntu/Debian:\n",[87,1329,1330,1332,1334,1336],{"class":89,"line":103},[87,1331,41],{"class":93},[87,1333,97],{"class":96},[87,1335,110],{"class":96},[87,1337,1338],{"class":96}," nmon\n",[87,1340,1341],{"class":89,"line":388},[87,1342,1130],{"emptyLinePlaceholder":623},[87,1344,1345],{"class":89,"line":394},[87,1346,1347],{"class":214},"# CentOS/RHEL:\n",[87,1349,1350,1352,1354,1356],{"class":89,"line":400},[87,1351,41],{"class":93},[87,1353,1142],{"class":96},[87,1355,110],{"class":96},[87,1357,1338],{"class":96},[21,1359,835,1360,1362,1363,1366,1367,426],{},[39,1361,952],{},". Нажмите ",[39,1364,1365],{},"m"," для переключения на экран памяти. Там вы увидите подробную разбивку по типам памяти, а также графики в реальном времени. Для выхода нажмите ",[39,1368,1085],{},[70,1370,1372],{"id":1371},"установка-glances","Установка glances",[21,1374,1375,1377],{},[39,1376,955],{}," — кросс-платформенный мониторинг в текстовом режиме с возможностью веб-интерфейса.",[78,1379,1381],{"className":80,"code":1380,"language":82,"meta":83,"style":83},"# Установка через pip (рекомендуется):\npip3 install glances\n\n# Или через менеджер пакетов (может быть устаревшая версия):\nsudo apt install glances   # Ubuntu/Debian\n",[39,1382,1383,1388,1398,1402,1407],{"__ignoreMap":83},[87,1384,1385],{"class":89,"line":90},[87,1386,1387],{"class":214},"# Установка через pip (рекомендуется):\n",[87,1389,1390,1393,1395],{"class":89,"line":103},[87,1391,1392],{"class":93},"pip3",[87,1394,110],{"class":96},[87,1396,1397],{"class":96}," glances\n",[87,1399,1400],{"class":89,"line":388},[87,1401,1130],{"emptyLinePlaceholder":623},[87,1403,1404],{"class":89,"line":394},[87,1405,1406],{"class":214},"# Или через менеджер пакетов (может быть устаревшая версия):\n",[87,1408,1409,1411,1413,1415,1418],{"class":89,"line":400},[87,1410,41],{"class":93},[87,1412,97],{"class":96},[87,1414,110],{"class":96},[87,1416,1417],{"class":96}," glances",[87,1419,1420],{"class":214},"   # Ubuntu/Debian\n",[21,1422,835,1423,1425,1426,1429],{},[39,1424,955],{},". По умолчанию отображаются все метрики, включая память (вверху слева). Нажмите ",[39,1427,1428],{},"h"," для справки по управлению.",[16,1431,433],{"id":432},[21,1433,1434],{},"После выполнения шагов вы должны:",[1436,1437,1438,1452,1460,1471],"ol",{},[32,1439,1440,1441,365,1444,1446,1447,1067,1449,1451],{},"Увидеть в выводе ",[39,1442,1443],{},"free -h",[39,1445,943],{}," актуальные значения памяти. Поле ",[39,1448,1028],{},[39,1450,1263],{},") должно быть разумным (не близким к нулю).",[32,1453,1454,1455,269,1457,1459],{},"В ",[39,1456,658],{},[39,1458,665],{}," убедиться, что нет процессов, постоянно потребляющих больше памяти, чем ожидалось.",[32,1461,1462,1463,1465,1466,1311,1468,1470],{},"При использовании ",[39,1464,940],{}," проверить, что ",[39,1467,1216],{},[39,1469,1220],{}," близки к нулю (если swap активен постоянно — это тревожный знак).",[32,1472,1454,1473,269,1475,1477],{},[39,1474,952],{},[39,1476,955],{}," оценить общую картину и тенденции.",[21,1479,1480,1481,1483,1484,269,1486,1488,1489,53,1491,42],{},"Если память заканчивается, вы увидите рост ",[39,1482,1011],{}," и падение ",[39,1485,337],{},[39,1487,1028],{},", а также увеличение активности swap (",[39,1490,1216],{},[39,1492,1220],{},[16,1494,503],{"id":502},[70,1496,1498],{"id":1497},"_1-ошибка-command-not-found-для-htopnmonglances","1. Ошибка \"command not found\" для htop/nmon/glances",[21,1500,1501,1504,1505,1507],{},[147,1502,1503],{},"Решение:"," Установите недостающий пакет через менеджер пакетов вашего дистрибутива (см. шаги выше). Убедитесь, что вы используете ",[39,1506,41],{}," для установки.",[70,1509,1511],{"id":1510},"_2-недостаточно-прав-для-просмотра-информации-о-процессах","2. Недостаточно прав для просмотра информации о процессах",[21,1513,1514,1516,1517,53,1519,53,1521,1524,1525,269,1527,1529,1530,1532],{},[147,1515,1503],{}," Обычно команды ",[39,1518,337],{},[39,1520,940],{},[39,1522,1523],{},"cat /proc/meminfo"," доступны всем. Но для просмотра всех процессов в ",[39,1526,658],{},[39,1528,665],{}," (особенно чужих) может потребоваться запуск с ",[39,1531,41],{},". Однако для общего обзора памяти это не обязательно.",[70,1534,1536],{"id":1535},"_3-неправильная-интерпретация-вывода-free-путаница-с-cachedbuffers","3. Неправильная интерпретация вывода free (путаница с cached/buffers)",[21,1538,1539,1541,1542,1311,1544,1546,1547,1549,1550,1552,1553,1556],{},[147,1540,1503],{}," Не ориентируйтесь на ",[39,1543,337],{},[39,1545,1011],{}," в старых версиях ",[39,1548,337],{},". Всегда смотрите на ",[39,1551,1028],{}," (или вычисляйте: ",[39,1554,1555],{},"free + buffers + cached","). Ядро Linux активно использует свободную память для кэширования, что ускоряет систему, и освободит её при необходимости.",[70,1558,1560],{"id":1559},"_4-высокое-использование-памяти-но-нет-процессов-потребителей","4. Высокое использование памяти, но нет процессов-потребителей",[21,1562,1563,1565,1566,1568,1569,53,1572,1575],{},[147,1564,1503],{}," Возможно, память используется ядром (например, для slab-аллокаторов). Проверьте в ",[39,1567,943],{}," поля ",[39,1570,1571],{},"Slab",[39,1573,1574],{},"KernelStack",". Также может быть утечка в драйвере или модуле ядра. В таком случае поможет перезагрузка или обновление системы.",[70,1577,1579],{"id":1578},"_5-утилиты-показывают-разную-информацию","5. Утилиты показывают разную информацию",[21,1581,1582,1584,1585,426],{},[147,1583,1503],{}," Разные инструменты могут использовать разные единицы измерения (кБ vs. KiB) или по-разному считать кэши. Всегда сверяйтесь с \"истинным источником\" — ",[39,1586,943],{},[559,1588,1589],{},"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 .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":83,"searchDepth":103,"depth":103,"links":1591},[1592,1593,1594,1595,1599,1600,1601,1605,1606],{"id":18,"depth":103,"text":19},{"id":26,"depth":103,"text":27},{"id":968,"depth":103,"text":969},{"id":1032,"depth":103,"text":1033,"children":1596},[1597,1598],{"id":1044,"depth":388,"text":1045},{"id":1088,"depth":388,"text":1089},{"id":1168,"depth":103,"text":1169},{"id":1224,"depth":103,"text":1225},{"id":1304,"depth":103,"text":1305,"children":1602},[1603,1604],{"id":1316,"depth":388,"text":1317},{"id":1371,"depth":388,"text":1372},{"id":432,"depth":103,"text":433},{"id":502,"depth":103,"text":503,"children":1607},[1608,1609,1610,1611,1612],{"id":1497,"depth":388,"text":1498},{"id":1510,"depth":388,"text":1511},{"id":1535,"depth":388,"text":1536},{"id":1559,"depth":388,"text":1560},{"id":1578,"depth":388,"text":1579},"2026-02-15 00:11:07","Узнайте, как эффективно отслеживать использование оперативной памяти в Linux с помощью встроенных команд и утилит. Пошаговая инструкция для быстрой диагностики и предотвращения проблем.","easy",[1617,1620,1623,1626],{"answer":1618,"question":1619},"Используйте команду `free -h`, которая покажет общую, использованную, свободную и кэшированную память в удобочитаемом формате.","Как быстро узнать, сколько свободной памяти в Linux?",{"answer":1621,"question":1622},"Cached — это память, используемая кэшем страниц ядра для ускорения доступа к диску. Buffers — это временное хранилище для блочных устройств. Оба типа памяти могут быть освобождены, если процессу потребуется больше RAM.","В чем разница между cached и buffers в выводе free?",{"answer":1624,"question":1625},"Используйте утилиты `top` или `htop`. В `top` нажмите `f` и выберите `MEM` для сортировки по памяти. `htop` по умолчанию показывает использование памяти цветными полосами.","Как continuously следить за использованием памяти в реальном времени?",{"answer":1627,"question":1628},"`/proc/meminfo` содержит детальную информацию о памяти, но в сыром виде. Для удобного просмотра используйте `cat /proc/meminfo` или утилиты вроде `smem`, которые показывают память на процесс.","Какая утилита дает наиболее подробную информацию о памяти?",[1630,1633,1636,1639,1642],{"name":1631,"text":1632},"Используйте команду free","Выполните `free -h` в терминале, чтобы увидеть общую информацию об использовании оперативной и подкачки.",{"name":1634,"text":1635},"Мониторьте в реальном времени с top/htop","Запустите `top` или установите `htop` (`sudo apt install htop`), чтобы интерактивно следить за процессами, потребляющими память.",{"name":1637,"text":1638},"Примените vmstat для статистики","Команда `vmstat -s` покажет сводную статистику по памяти, включая swap и ошибки.",{"name":1640,"text":1641},"Изучите /proc/meminfo","Откройте файл `cat /proc/meminfo` для получения детальных данных о памяти, включая MemTotal, MemFree, Buffers, Cached и др.",{"name":1643,"text":1644},"Установите расширенные утилиты (опционально)","Для более продвинутого мониторинга установите `nmon` или `glances`, которые предоставляют графики и детализацию по процессам.","PT15M",[1647,1648,1649,1650,1651,943,1652,1653,1654,1655],"мониторинг памяти linux","как посмотреть память в linux","команда free linux","top команда linux память","vmstat память","htop установка","nmon мониторинг","проверка памяти linux","использование памяти процессом linux",{},[1658,1659,1660],"/guides/linux/disk-usage-monitoring","/guides/linux/process-monitoring","/errors/linux/out-of-memory-error",{"title":905,"description":1614},"guides/linux/memory-usage-monitoring","Это руководство познакомит вас с основными и продвинутыми методами мониторинга памяти в Linux. Вы научитесь использовать команды free, top, vmstat и другие, чтобы контролировать потребление ресурсов и оперативно реагировать на нехватку памяти.",[625,1665,1666,337,658,940,665,952],"memory","мониторинг","DHhACTijZGsBk3k77pxV4kmuYl1H9STa8Am9QCpFUqQ",{"id":1669,"title":1670,"appliesTo":1671,"author":11,"body":1674,"canonical":575,"code":575,"createdAt":2762,"description":2763,"difficulty":578,"draft":579,"estimatedTime":2764,"extension":581,"faq":2765,"howToSteps":2778,"howToTotalTime":2797,"image":575,"keywords":2798,"locale":621,"meta":2808,"navigation":623,"path":629,"platform":625,"related":2809,"section":2813,"seo":2814,"severity":2815,"stem":2816,"summary":2817,"tags":2818,"twitterCreator":575,"twitterSite":575,"type":639,"updatedAt":2762,"__hash__":2825},"content_ru/errors/linux/oom-killer.md","OOM Killer в Linux: как обнаружить и предотвратить",[907,908,1672,1673],"Debian 11+","ядро Linux 4.15+",{"type":13,"value":1675,"toc":2746},[1676,1680,1686,1689,1703,1710,1714,1721,1732,1738,1742,1745,1989,1991,1995,2003,2018,2024,2060,2066,2088,2094,2104,2108,2114,2120,2190,2195,2270,2274,2277,2287,2304,2315,2321,2330,2333,2339,2348,2352,2355,2384,2387,2446,2450,2533,2537,2540,2545,2591,2596,2656,2666,2670,2712,2716,2719,2734,2737,2743],[16,1677,1679],{"id":1678},"что-такое-oom-killer-и-почему-он-появляется","Что такое OOM Killer и почему он появляется",[21,1681,1682,1685],{},[147,1683,1684],{},"OOM Killer (Out-of-Memory Killer)"," — это механизм ядра Linux, который автоматически завершает процессы, когда система исчерпала доступную оперативную память (RAM) и swap-пространство. Его цель — освободить память, чтобы ядро и критические системные процессы могли продолжить работу, предотвращая полный крах системы.",[21,1687,1688],{},"Обычно OOM Killer активируется, когда:",[29,1690,1691,1694,1697,1700],{},[32,1692,1693],{},"Физическая RAM и swap заполнены на 100%.",[32,1695,1696],{},"Приложение имеет утечку памяти (memory leak).",[32,1698,1699],{},"На сервере запущено слишком много memory-intensive процессов.",[32,1701,1702],{},"Неправильно настроены лимиты памяти в контейнерах (Docker/Kubernetes).",[21,1704,1705,1706,1709],{},"Если вы видите в логах сообщение ",[39,1707,1708],{},"Killed process"," или приложение внезапно завершается с кодом 137 (SIGKILL), скорее всего, виноват OOM Killer.",[16,1711,1713],{"id":1712},"как-работает-oom-killer","Как работает OOM Killer",[21,1715,1716,1717,1720],{},"Ядро Linux вычисляет ",[147,1718,1719],{},"oom_score"," для каждого процесса на основе:",[29,1722,1723,1726,1729],{},[32,1724,1725],{},"Доли памяти, потребляемой процессом (основной фактор).",[32,1727,1728],{},"Привилегий процесса (процессы root имеют меньший шанс быть убитыми).",[32,1730,1731],{},"Времени жизни процесса (долгоживущие процессы могут иметь более высокий score).",[21,1733,1734,1735,1737],{},"Процесс с самым высоким ",[39,1736,1719],{}," выбирается для завершения. Однако это не всегда оптимально: OOM Killer может убить важный сервис, а оставить фоновый процесс с утечкой.",[16,1739,1741],{"id":1740},"диагностика-проблемы","Диагностика проблемы",[21,1743,1744],{},"Перед любыми действиями нужно подтвердить, что проблема именно в OOM Killer.",[1436,1746,1747,1789,1824,1865],{},[32,1748,1749,342,1752,1772,1775,1776,1782,1784,1785,1788],{},[147,1750,1751],{},"Проверьте логи ядра",[78,1753,1755],{"className":80,"code":1754,"language":82,"meta":83,"style":83},"dmesg | grep -i kill\n",[39,1756,1757],{"__ignoreMap":83},[87,1758,1759,1762,1764,1766,1769],{"class":89,"line":90},[87,1760,1761],{"class":93},"dmesg",[87,1763,256],{"class":200},[87,1765,259],{"class":93},[87,1767,1768],{"class":173}," -i",[87,1770,1771],{"class":96}," kill\n",[1773,1774],"br",{},"Пример вывода:",[78,1777,1780],{"className":1778,"code":1779,"language":651},[998],"[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",[39,1781,1779],{"__ignoreMap":83},[1773,1783],{},"Здесь видно, что процесс ",[39,1786,1787],{},"nginx"," с PID 1234 был убит.",[32,1790,1791,342,1794,1804,1806,1807,53,1810,53,1812,1311,1814,1817,1818,1820,1821,1823],{},[147,1792,1793],{},"Оцените общую память",[78,1795,1796],{"className":80,"code":978,"language":82,"meta":83,"style":83},[39,1797,1798],{"__ignoreMap":83},[87,1799,1800,1802],{"class":89,"line":90},[87,1801,337],{"class":93},[87,1803,987],{"class":173},[1773,1805],{},"Обратите внимание на столбцы ",[39,1808,1809],{},"total",[39,1811,1011],{},[39,1813,1028],{},[39,1815,1816],{},"Swap",". Если ",[39,1819,1028],{}," близок к нулю, а ",[39,1822,1816],{}," также заполнен — система в критическом состоянии.",[32,1825,1826,342,1829,1853,1855,1856,1858,1859,1861,1862,42],{},[147,1827,1828],{},"Найдите процесс-потребителя",[78,1830,1832],{"className":80,"code":1831,"language":82,"meta":83,"style":83},"top -b -n 1 | head -20\n",[39,1833,1834],{"__ignoreMap":83},[87,1835,1836,1838,1841,1843,1845,1847,1850],{"class":89,"line":90},[87,1837,658],{"class":93},[87,1839,1840],{"class":173}," -b",[87,1842,301],{"class":173},[87,1844,304],{"class":173},[87,1846,256],{"class":200},[87,1848,1849],{"class":93}," head",[87,1851,1852],{"class":173}," -20\n",[1773,1854],{},"Или используйте ",[39,1857,665],{}," с сортировкой по памяти (клавиша ",[39,1860,1158],{}," → ",[39,1863,1864],{},"MEM%",[32,1866,1867,342,1870,1984,1986,1987,426],{},[147,1868,1869],{},"Проверьте oom_score процессов",[78,1871,1873],{"className":80,"code":1872,"language":82,"meta":83,"style":83},"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",[39,1874,1875,1916,1960],{"__ignoreMap":83},[87,1876,1877,1879,1882,1884,1887,1890,1892,1894,1897,1900,1902,1905,1907,1910,1913],{"class":89,"line":90},[87,1878,467],{"class":200},[87,1880,1881],{"class":207}," pid ",[87,1883,473],{"class":200},[87,1885,1886],{"class":207}," $(",[87,1888,1889],{"class":93},"ps",[87,1891,244],{"class":173},[87,1893,256],{"class":200},[87,1895,1896],{"class":93}," awk",[87,1898,1899],{"class":96}," '{print $1}'",[87,1901,256],{"class":200},[87,1903,1904],{"class":93}," tail",[87,1906,301],{"class":173},[87,1908,1909],{"class":96}," +2",[87,1911,1912],{"class":207},"); ",[87,1914,1915],{"class":200},"do\n",[87,1917,1918,1921,1924,1927,1930,1932,1935,1937,1940,1943,1946,1948,1950,1952,1955,1957],{"class":89,"line":103},[87,1919,1920],{"class":173},"  echo",[87,1922,1923],{"class":96}," \"PID ",[87,1925,1926],{"class":207},"$pid",[87,1928,1929],{"class":96},": $(",[87,1931,1241],{"class":93},[87,1933,1934],{"class":96}," /proc/",[87,1936,1926],{"class":207},[87,1938,1939],{"class":96},"/oom_score ",[87,1941,1942],{"class":200},"2>",[87,1944,1945],{"class":96},"/dev/null) (adj: $(",[87,1947,1241],{"class":93},[87,1949,1934],{"class":96},[87,1951,1926],{"class":207},[87,1953,1954],{"class":96},"/oom_score_adj ",[87,1956,1942],{"class":200},[87,1958,1959],{"class":96},"/dev/null))\"\n",[87,1961,1962,1964,1966,1969,1972,1974,1977,1979,1981],{"class":89,"line":388},[87,1963,492],{"class":200},[87,1965,256],{"class":200},[87,1967,1968],{"class":93}," sort",[87,1970,1971],{"class":173}," -k3",[87,1973,301],{"class":173},[87,1975,1976],{"class":173}," -r",[87,1978,256],{"class":200},[87,1980,1849],{"class":93},[87,1982,1983],{"class":173}," -10\n",[1773,1985],{},"Это покажет топ-10 процессов с наивысшим ",[39,1988,1719],{},[428,1990],{},[16,1992,1994],{"id":1993},"методы-решения-проблемы","Методы решения проблемы",[70,1996,1998,1999,2002],{"id":1997},"шаг-1-настройка-oom_score_adj-для-защиты-ключевых-процессов","Шаг 1: Настройка ",[39,2000,2001],{},"oom_score_adj"," для защиты ключевых процессов",[21,2004,2005,2006,2009,2010,2013,2014,2017],{},"Каждому процессу можно задать ",[147,2007,2008],{},"adj","-значение от ",[39,2011,2012],{},"-1000"," (максимальная защита) до ",[39,2015,2016],{},"+1000"," (максимальный приоритет на убийство). Это самый быстрый способ защитить процесс.",[21,2019,2020,2023],{},[147,2021,2022],{},"Для одноразовой настройки"," (до перезагрузки):",[78,2025,2027],{"className":80,"code":2026,"language":82,"meta":83,"style":83},"# Замените \u003CPID> на идентификатор процесса\necho -1000 > /proc/\u003CPID>/oom_score_adj\n",[39,2028,2029,2034],{"__ignoreMap":83},[87,2030,2031],{"class":89,"line":90},[87,2032,2033],{"class":214},"# Замените \u003CPID> на идентификатор процесса\n",[87,2035,2036,2039,2042,2045,2047,2049,2052,2055,2057],{"class":89,"line":103},[87,2037,2038],{"class":173},"echo",[87,2040,2041],{"class":173}," -1000",[87,2043,2044],{"class":200}," >",[87,2046,1934],{"class":96},[87,2048,201],{"class":200},[87,2050,2051],{"class":96},"PI",[87,2053,2054],{"class":207},"D",[87,2056,211],{"class":200},[87,2058,2059],{"class":96},"/oom_score_adj\n",[21,2061,2062,2065],{},[147,2063,2064],{},"Для постоянной настройки через systemd"," (рекомендуется):\nСоздайте или отредактируйте юнит:",[78,2067,2071],{"className":2068,"code":2069,"language":2070,"meta":83,"style":83},"language-ini shiki shiki-themes github-light github-dark","# /etc/systemd/system/ваш-сервис.service.d/oom-protect.conf\n[Service]\nOOMScoreAdjust=-1000\n","ini",[39,2072,2073,2078,2083],{"__ignoreMap":83},[87,2074,2075],{"class":89,"line":90},[87,2076,2077],{},"# /etc/systemd/system/ваш-сервис.service.d/oom-protect.conf\n",[87,2079,2080],{"class":89,"line":103},[87,2081,2082],{},"[Service]\n",[87,2084,2085],{"class":89,"line":388},[87,2086,2087],{},"OOMScoreAdjust=-1000\n",[21,2089,2090,2091,426],{},"Затем перезапустите сервис: ",[39,2092,2093],{},"systemctl daemon-reload && systemctl restart ваш-сервис",[21,2095,2096,2099,2100,2103],{},[147,2097,2098],{},"Важно",": Не устанавливайте ",[39,2101,2102],{},"oom_score_adj=-1000"," для всех процессов — это может привести к тому, что OOM Killer не сможет освободить память и система зависнет.",[70,2105,2107],{"id":2106},"шаг-2-использование-cgroups-для-ограничения-памяти","Шаг 2: Использование cgroups для ограничения памяти",[21,2109,2110,2113],{},[147,2111,2112],{},"cgroups (control groups)"," позволяют задать жёсткие лимиты памяти для группы процессов. Это лучший способ для контейнеров и изолированных сервисов.",[21,2115,2116,2119],{},[147,2117,2118],{},"Через systemd"," (современные дистрибутивы):",[78,2121,2123],{"className":80,"code":2122,"language":82,"meta":83,"style":83},"# Запустить команду с лимитом 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",[39,2124,2125,2130,2147,2151,2156,2161,2165,2176],{"__ignoreMap":83},[87,2126,2127],{"class":89,"line":90},[87,2128,2129],{"class":214},"# Запустить команду с лимитом 500 МБ\n",[87,2131,2132,2135,2138,2141,2144],{"class":89,"line":103},[87,2133,2134],{"class":93},"systemd-run",[87,2136,2137],{"class":173}," --scope",[87,2139,2140],{"class":173}," -p",[87,2142,2143],{"class":96}," MemoryMax=500M",[87,2145,2146],{"class":96}," /путь/к/команде\n",[87,2148,2149],{"class":89,"line":388},[87,2150,1130],{"emptyLinePlaceholder":623},[87,2152,2153],{"class":89,"line":394},[87,2154,2155],{"class":214},"# Или для существующего сервиса создайте дроп-ин:\n",[87,2157,2158],{"class":89,"line":400},[87,2159,2160],{"class":214},"# /etc/systemd/system/ваш-сервис.service.d/limits.conf\n",[87,2162,2163],{"class":89,"line":406},[87,2164,2082],{"class":207},[87,2166,2167,2170,2173],{"class":89,"line":412},[87,2168,2169],{"class":207},"MemoryMax",[87,2171,2172],{"class":200},"=",[87,2174,2175],{"class":96},"1G\n",[87,2177,2179,2182,2184,2187],{"class":89,"line":2178},8,[87,2180,2181],{"class":207},"MemorySwapMax",[87,2183,2172],{"class":200},[87,2185,2186],{"class":96},"2G",[87,2188,2189],{"class":214},"  # если нужен swap\n",[21,2191,2192,342],{},[147,2193,2194],{},"Вручную через cgroup v2",[78,2196,2198],{"className":80,"code":2197,"language":82,"meta":83,"style":83},"# Создайте 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",[39,2199,2200,2205,2215,2220,2245,2250],{"__ignoreMap":83},[87,2201,2202],{"class":89,"line":90},[87,2203,2204],{"class":214},"# Создайте cgroup\n",[87,2206,2207,2209,2212],{"class":89,"line":103},[87,2208,41],{"class":93},[87,2210,2211],{"class":96}," mkdir",[87,2213,2214],{"class":96}," /sys/fs/cgroup/mylimit\n",[87,2216,2217],{"class":89,"line":388},[87,2218,2219],{"class":214},"# Установите лимит 1 ГБ\n",[87,2221,2222,2224,2227,2230,2233,2236,2239,2242],{"class":89,"line":394},[87,2223,2038],{"class":173},[87,2225,2226],{"class":207}," $((",[87,2228,2229],{"class":93},"1*1024*1024*1024",[87,2231,2232],{"class":207},")) ",[87,2234,2235],{"class":200},"|",[87,2237,2238],{"class":93}," sudo",[87,2240,2241],{"class":96}," tee",[87,2243,2244],{"class":96}," /sys/fs/cgroup/mylimit/memory.max\n",[87,2246,2247],{"class":89,"line":400},[87,2248,2249],{"class":214},"# Запустите процесс в этой группе\n",[87,2251,2252,2254,2257,2260,2262,2265,2267],{"class":89,"line":406},[87,2253,41],{"class":93},[87,2255,2256],{"class":96}," echo",[87,2258,2259],{"class":173}," $$",[87,2261,2044],{"class":200},[87,2263,2264],{"class":96}," /sys/fs/cgroup/mylimit/cgroup.procs",[87,2266,1116],{"class":207},[87,2268,2269],{"class":93},"/путь/к/вашему/приложению\n",[70,2271,2273],{"id":2272},"шаг-3-настройка-параметров-ядра","Шаг 3: Настройка параметров ядра",[21,2275,2276],{},"Изменение поведения OOM Killer на уровне ядра.",[21,2278,2279,2282,2283,2286],{},[147,2280,2281],{},"Вариант A: Запретить переcommit памяти"," (строгий контроль):\nВ ",[39,2284,2285],{},"/etc/sysctl.conf"," добавьте:",[78,2288,2292],{"className":2289,"code":2290,"language":2291,"meta":83,"style":83},"language-conf shiki shiki-themes github-light github-dark","vm.overcommit_memory = 2\nvm.overcommit_ratio = 100  # разрешить commit только до 100% RAM+swap\n","conf",[39,2293,2294,2299],{"__ignoreMap":83},[87,2295,2296],{"class":89,"line":90},[87,2297,2298],{},"vm.overcommit_memory = 2\n",[87,2300,2301],{"class":89,"line":103},[87,2302,2303],{},"vm.overcommit_ratio = 100  # разрешить commit только до 100% RAM+swap\n",[21,2305,2306,2307,2310,2311,2314],{},"Примените: ",[39,2308,2309],{},"sudo sysctl -p",". Это предотвратит выделение памяти, которой физически нет, но может вызвать ошибки ",[39,2312,2313],{},"fork: Cannot allocate memory"," у приложений.",[21,2316,2317,2320],{},[147,2318,2319],{},"Вариант B: Режим паники вместо убийства"," (для отладки):",[78,2322,2324],{"className":2289,"code":2323,"language":2291,"meta":83,"style":83},"vm.panic_on_oom = 2\n",[39,2325,2326],{"__ignoreMap":83},[87,2327,2328],{"class":89,"line":90},[87,2329,2323],{},[21,2331,2332],{},"При нехватке памяти система упадёт в kernel panic, что полезно для сбора дампов, но неприемлемо для продакшена.",[21,2334,2335,2338],{},[147,2336,2337],{},"Вариант C: Изменить степень агрессивности OOM Killer"," (редко используется):",[78,2340,2342],{"className":2289,"code":2341,"language":2291,"meta":83,"style":83},"vm.oom_kill_allocating_task = 1  # убивать процесс, который выделил память, а не случайный\n",[39,2343,2344],{"__ignoreMap":83},[87,2345,2346],{"class":89,"line":90},[87,2347,2341],{},[70,2349,2351],{"id":2350},"шаг-4-оптимизация-приложения-или-увеличение-ресурсов","Шаг 4: Оптимизация приложения или увеличение ресурсов",[21,2353,2354],{},"Если проблема вызвана утечкой памяти:",[29,2356,2357,2369,2379],{},[32,2358,2359,2360,53,2363,53,2366,426],{},"Используйте профилировщики: ",[39,2361,2362],{},"valgrind --leak-check=full",[39,2364,2365],{},"heaptrack",[39,2367,2368],{},"perf",[32,2370,2371,2372,1311,2375,2378],{},"Для Java-приложений: настройте ",[39,2373,2374],{},"-Xmx",[39,2376,2377],{},"-Xms"," в JVM.",[32,2380,2381,2382,42],{},"Для Python: проверьте на утечки (например, через ",[39,2383,364],{},[21,2385,2386],{},"Если нагрузка обоснована:",[29,2388,2389,2392],{},[32,2390,2391],{},"Увеличьте объём RAM на сервере.",[32,2393,2394,2395],{},"Добавьте swap-файл (временное решение, но не панацея):\n",[78,2396,2398],{"className":80,"code":2397,"language":82,"meta":83,"style":83},"sudo fallocate -l 4G /swapfile\nsudo chmod 600 /swapfile\nsudo mkswap /swapfile\nsudo swapon /swapfile\n",[39,2399,2400,2416,2428,2437],{"__ignoreMap":83},[87,2401,2402,2404,2407,2410,2413],{"class":89,"line":90},[87,2403,41],{"class":93},[87,2405,2406],{"class":96}," fallocate",[87,2408,2409],{"class":173}," -l",[87,2411,2412],{"class":96}," 4G",[87,2414,2415],{"class":96}," /swapfile\n",[87,2417,2418,2420,2423,2426],{"class":89,"line":103},[87,2419,41],{"class":93},[87,2421,2422],{"class":96}," chmod",[87,2424,2425],{"class":173}," 600",[87,2427,2415],{"class":96},[87,2429,2430,2432,2435],{"class":89,"line":388},[87,2431,41],{"class":93},[87,2433,2434],{"class":96}," mkswap",[87,2436,2415],{"class":96},[87,2438,2439,2441,2444],{"class":89,"line":394},[87,2440,41],{"class":93},[87,2442,2443],{"class":96}," swapon",[87,2445,2415],{"class":96},[16,2447,2449],{"id":2448},"профилактика-oom-killer","Профилактика OOM Killer",[1436,2451,2452,2477,2518],{},[32,2453,2454,342,2457],{},[147,2455,2456],{},"Мониторинг памяти",[29,2458,2459,2468,2471],{},[32,2460,2461,2462,365,2465,426],{},"Используйте ",[39,2463,2464],{},"Prometheus + node_exporter",[39,2466,2467],{},"Zabbix",[32,2469,2470],{},"Настройте алерты при использовании RAM > 80%.",[32,2472,2473,2474,426],{},"Пример команды для быстрой проверки: ",[39,2475,2476],{},"awk '/MemAvailable/ {print $2/1024\" GB available\"}' /proc/meminfo",[32,2478,2479,342,2482],{},[147,2480,2481],{},"Логирование использования памяти",[78,2483,2485],{"className":80,"code":2484,"language":82,"meta":83,"style":83},"# Запись каждые 5 минут в cron\n*/5 * * * * /usr/bin/free -h >> /var/log/memory.log\n",[39,2486,2487,2492],{"__ignoreMap":83},[87,2488,2489],{"class":89,"line":90},[87,2490,2491],{"class":214},"# Запись каждые 5 минут в cron\n",[87,2493,2494,2497,2500,2502,2505,2507,2509,2512,2515],{"class":89,"line":103},[87,2495,2496],{"class":200},"*",[87,2498,2499],{"class":207},"/5 ",[87,2501,2496],{"class":200},[87,2503,2504],{"class":200}," *",[87,2506,2504],{"class":200},[87,2508,2504],{"class":200},[87,2510,2511],{"class":207}," /usr/bin/free -h ",[87,2513,2514],{"class":200},">>",[87,2516,2517],{"class":207}," /var/log/memory.log\n",[32,2519,2520,342,2523],{},[147,2521,2522],{},"Регулярный аудит процессов",[29,2524,2525,2530],{},[32,2526,2527,2528,426],{},"Ищите процессы с аномально высоким ",[39,2529,1719],{},[32,2531,2532],{},"Проверяйте контейнеры на соответствие лимитам.",[16,2534,2536],{"id":2535},"особенности-в-контейнерах-dockerkubernetes","Особенности в контейнерах (Docker/Kubernetes)",[21,2538,2539],{},"В контейнерах OOM Killer работает внутри изоляции cgroups, но если контейнер исчерпает свой лимит, ядро убьёт процесс внутри него.",[21,2541,2542,342],{},[147,2543,2544],{},"Docker",[78,2546,2548],{"className":80,"code":2547,"language":82,"meta":83,"style":83},"# Запуск с лимитом 512 МБ RAM и 1 ГБ swap\ndocker run -d --memory=512m --memory-swap=1g ваш-образ\n\n# Проверка лимитов\ndocker stats\n",[39,2549,2550,2555,2575,2579,2584],{"__ignoreMap":83},[87,2551,2552],{"class":89,"line":90},[87,2553,2554],{"class":214},"# Запуск с лимитом 512 МБ RAM и 1 ГБ swap\n",[87,2556,2557,2560,2563,2566,2569,2572],{"class":89,"line":103},[87,2558,2559],{"class":93},"docker",[87,2561,2562],{"class":96}," run",[87,2564,2565],{"class":173}," -d",[87,2567,2568],{"class":173}," --memory=512m",[87,2570,2571],{"class":173}," --memory-swap=1g",[87,2573,2574],{"class":96}," ваш-образ\n",[87,2576,2577],{"class":89,"line":388},[87,2578,1130],{"emptyLinePlaceholder":623},[87,2580,2581],{"class":89,"line":394},[87,2582,2583],{"class":214},"# Проверка лимитов\n",[87,2585,2586,2588],{"class":89,"line":400},[87,2587,2559],{"class":93},[87,2589,2590],{"class":96}," stats\n",[21,2592,2593,342],{},[147,2594,2595],{},"Kubernetes",[78,2597,2601],{"className":2598,"code":2599,"language":2600,"meta":83,"style":83},"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",[39,2602,2603,2612,2619,2630,2640,2647],{"__ignoreMap":83},[87,2604,2605,2609],{"class":89,"line":90},[87,2606,2608],{"class":2607},"s9eBZ","resources",[87,2610,2611],{"class":207},":\n",[87,2613,2614,2617],{"class":89,"line":103},[87,2615,2616],{"class":2607},"  limits",[87,2618,2611],{"class":207},[87,2620,2621,2624,2627],{"class":89,"line":388},[87,2622,2623],{"class":2607},"    memory",[87,2625,2626],{"class":207},": ",[87,2628,2629],{"class":96},"\"512Mi\"\n",[87,2631,2632,2635,2637],{"class":89,"line":394},[87,2633,2634],{"class":2607},"    cpu",[87,2636,2626],{"class":207},[87,2638,2639],{"class":96},"\"500m\"\n",[87,2641,2642,2645],{"class":89,"line":400},[87,2643,2644],{"class":2607},"  requests",[87,2646,2611],{"class":207},[87,2648,2649,2651,2653],{"class":89,"line":406},[87,2650,2623],{"class":2607},[87,2652,2626],{"class":207},[87,2654,2655],{"class":96},"\"256Mi\"\n",[21,2657,2658,2659,1311,2662,2665],{},"Убедитесь, что ",[39,2660,2661],{},"requests",[39,2663,2664],{},"limits"," установлены адекватно. При превышении лимита поды будет убит (OOMKilled).",[16,2667,2669],{"id":2668},"частые-ошибки-при-настройке","Частые ошибки при настройке",[29,2671,2672,2680,2686,2696],{},[32,2673,2674,2679],{},[147,2675,2676,2677],{},"Защита всех процессов через ",[39,2678,2102],{},": Это отключает OOM Killer полностью, что может привести к полной блокировке системы при нехватке памяти.",[32,2681,2682,2685],{},[147,2683,2684],{},"Установка слишком высоких лимитов cgroups",": Если лимит выше, чем физическая RAM, OOM Killer всё равно сработает на уровне хоста.",[32,2687,2688,2691,2692,2695],{},[147,2689,2690],{},"Игнорирование swap",": Swap замедляет систему, но может дать время на реакцию. Полный отказ от swap (",[39,2693,2694],{},"swapoff -a",") ускорит срабатывание OOM Killer.",[32,2697,2698,2701,2702,2704,2705,2708,2709,2711],{},[147,2699,2700],{},"Неправильное толкование логов",": Сообщение ",[39,2703,1708],{}," может быть и от ручного ",[39,2706,2707],{},"kill -9",". Всегда проверяйте ",[39,2710,1761],{}," и код выхода процесса (137 = SIGKILL, часто от OOM).",[16,2713,2715],{"id":2714},"что-дальше","Что дальше?",[21,2717,2718],{},"После применения мер проверьте:",[1436,2720,2721,2728,2731],{},[32,2722,2723,2724,2727],{},"Стабильность работы под нагрузкой (тесты с ",[39,2725,2726],{},"stress-ng"," или реальной нагрузкой).",[32,2729,2730],{},"Логи на отсутствие новых записей OOM Killer.",[32,2732,2733],{},"Корректность работы защищённых процессов (не потребляют ли они слишком много памяти в ущерб другим).",[21,2735,2736],{},"Если проблема остаётся, рассмотрите архитектурные изменения: шардирование, кэширование, использование более эффективных алгоритмов обработки данных.",[21,2738,2739,2742],{},[147,2740,2741],{},"Запомните",": OOM Killer — это последний рубеж защиты системы. Лучшая стратегия — не допускать ситуаций, когда он срабатывает, через мониторинг и грамотное планирование ресурсов.",[559,2744,2745],{},"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":83,"searchDepth":103,"depth":103,"links":2747},[2748,2749,2750,2751,2758,2759,2760,2761],{"id":1678,"depth":103,"text":1679},{"id":1712,"depth":103,"text":1713},{"id":1740,"depth":103,"text":1741},{"id":1993,"depth":103,"text":1994,"children":2752},[2753,2755,2756,2757],{"id":1997,"depth":388,"text":2754},"Шаг 1: Настройка oom_score_adj для защиты ключевых процессов",{"id":2106,"depth":388,"text":2107},{"id":2272,"depth":388,"text":2273},{"id":2350,"depth":388,"text":2351},{"id":2448,"depth":103,"text":2449},{"id":2535,"depth":103,"text":2536},{"id":2668,"depth":103,"text":2669},{"id":2714,"depth":103,"text":2715},"2026-02-14 11:52:27","Подробное руководство по работе OOM Killer в Linux. Узнайте, как анализировать логи, настроить параметры ядра и предотвратить завершение процессов из-за нехватки памяти. Пошаговые инструкции для администраторов.","15-30 мин",[2766,2769,2772,2775],{"answer":2767,"question":2768},"OOM Killer работает на основе очков (`oom_score`), которые вычисляются исходя из использования памяти и других факторов. Если процесс потребляет много RAM, даже будучи системным, он может быть убит. Настройка `oom_score_adj` помогает защитить критические процессы.","Почему OOM Killer убивает важные системные процессы?",{"answer":2770,"question":2771},"Можно установить `vm.panic_on_oom=2` в `/etc/sysctl.conf` и применить `sysctl -p`. При нехватке памяти система вместо убийства процессов упадёт в панику (kernel panic), что полезно для отладки, но не для продакшена.","Как временно отключить OOM Killer?",{"answer":2773,"question":2774},"Для процесса с PID `\u003CPID>` запишите отрицательное значение (например, `-1000`) в `/proc/\u003CPID>/oom_score_adj`. Это значительно снизит его `oom_score` и вероятность убийства. Для постоянной защиты настройте через systemd или скрипт.","Как защитить конкретный процесс от OOM Killer?",{"answer":2776,"question":2777},"Да, но контейнеры изолированы через cgroups. OOM Killer убивает процессы внутри контейнера, если контейнер исчерпал свой лимит памяти. Настройте `--memory` и `--memory-swap` при запуске контейнера, а также `oom_score_adj` внутри него.","OOM Killer работает внутри Docker-контейнеров?",[2779,2782,2785,2788,2791,2794],{"name":2780,"text":2781},"Анализ логов ядра на наличие записей OOM Killer","Используйте команду `dmesg | grep -i kill` или просмотрите `/var/log/syslog` на наличие строк с \\Out of memory\\ и \\Killed process\\. Запишите имя процесса и его PID.",{"name":2783,"text":2784},"Проверка текущего использования памяти","Выполните `free -h` для общего обзора памяти и swap. Используйте `top` или `htop` для сортировки процессов по использованию RAM (клавиша `M` в htop).",{"name":2786,"text":2787},"Настройка oom_score_adj для защиты процесса","Для процесса с PID `\u003CPID>` выполните `echo -1000 > /proc/\u003CPID>/oom_score_adj`. Это значение от -1000 до +1000, где -1000 максимально защищает процесс. Для перманентной настройки используйте systemd-юнит с `OOMScoreAdjust=-1000`.",{"name":2789,"text":2790},"Использование cgroups для ограничения памяти","Создайте cgroup через systemd: `systemd-run --scope -p MemoryMax=500M ваша_команда`. Или вручную: `mkdir /sys/fs/cgroup/mylimit && echo 500M > /sys/fs/cgroup/mylimit/memory.max` и запустите процесс в этой группе.",{"name":2792,"text":2793},"Настройка параметров ядра","Отредактируйте `/etc/sysctl.conf` и добавьте строки: `vm.panic_on_oom=2` (паника вместо убийства) или `vm.overcommit_memory=2` (запрет переcommit'а памяти). Примените `sysctl -p`.",{"name":2795,"text":2796},"Оптимизация приложения или увеличение RAM","Если проблема хроническая, проанализируйте утечки памяти в приложении (например, через `valgrind`). На сервере без возможности оптимизации рассмотрите апгрейд оперативной памяти.","PT30M",[2799,2800,2801,2802,2001,2803,2804,2805,2806,2807],"oom killer linux","killed process linux","нехватка памяти linux","как отключить oom killer","linux out of memory","убийство процессов ядром","cgroups memory limit","dmesg oom killer","vm.overcommit_memory",{},[2810,2811,2812],"/errors/linux/out-of-memory","/guides/linux/monitor-memory-usage","/guides/linux/systemd-cgroups","Ошибки Linux",{"title":1670,"description":2763},"high","errors/linux/oom-killer","Этот гайд объясняет механизм OOM Killer в Linux и предоставляет практические шаги по диагностике и предотвращению завершения процессов из-за нехватки памяти. Вы научитесь анализировать логи, настраивать приоритеты процессов и управлять памятью с помощью cgroups.",[2819,2820,2821,2822,2823,2824],"linux errors","oom killer","memory management","администрирование","kernel","cgroups","yLKZsBBOdw0WxB2klhnj1kgSj9b0cNfsSTCuvycB6Aw"]