[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/errors/linux/zombie-process":3,"mdc--njqhyy-key":499,"mdc-whzqnm-key":509,"mdc--1hh96k-key":517,"mdc-j82s2o-key":525,"mdc--sluvg0-key":549,"mdc-eo3ewl-key":557,"related-/errors/linux/high-load,/errors/linux/out-of-memory":589},{"id":4,"title":5,"appliesTo":6,"author":11,"body":12,"canonical":446,"code":446,"createdAt":447,"description":448,"difficulty":449,"draft":450,"estimatedTime":451,"extension":452,"faq":453,"howToSteps":463,"howToTotalTime":473,"image":446,"keywords":474,"locale":480,"meta":481,"navigation":151,"path":482,"platform":483,"related":484,"section":487,"seo":488,"severity":489,"stem":490,"summary":491,"tags":492,"twitterCreator":446,"twitterSite":446,"type":497,"updatedAt":447,"__hash__":498},"content_ru/errors/linux/zombie-process.md","Исправляем зомби-процесс в Linux: причины и быстрое решение",[7,8,9,10],"Linux (ядро 4.x и выше)","Ubuntu 22.04/24.04","Debian 11/12","CentOS 8+/AlmaLinux 8+","FixPedia Team",{"type":13,"value":14,"toc":437},"minimark",[15,20,33,43,54,58,90,94,98,105,174,177,223,229,233,236,256,259,278,281,284,288,294,367,370,389,393,433],[16,17,19],"h2",{"id":18},"что-означает-ошибка-зомби-процесс","Что означает ошибка зомби-процесс",[21,22,23,24,28,29,32],"p",{},"Зомби-процесс (в списках отображается как ",[25,26,27],"code",{},"defunct"," и имеет статус ",[25,30,31],{},"Z",") — это запись в таблице процессов, оставшаяся после завершения дочернего процесса. Сам «зомби» не потребляет CPU и почти не использует память, но удерживает свой PID и занимает слот в таблице. Если накопится много таких записей, система может отказать во fork новых процессов. Выглядит это примерно так:",[34,35,41],"pre",{"className":36,"code":38,"language":39,"meta":40},[37],"language-text","USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND\nwww-data 12345  0.0  0.0      0     0 ?        Z    09:10   0:00 [php] \u003Cdefunct>\n","text","",[25,42,38],{"__ignoreMap":40},[21,44,45,46,49,50,53],{},"Ошибка проявляется, когда приложение или демон порождает дочерние процессы, но не дожидается их завершения через системный вызов ",[25,47,48],{},"wait","/",[25,51,52],{},"waitpid",".",[16,55,57],{"id":56},"причины-возникновения","Причины возникновения",[59,60,61,68,75,78,81],"ul",{},[62,63,64,65,67],"li",{},"Родительский процесс содержит ошибку и не обрабатывает завершение дочерних (нет вызова ",[25,66,48],{},").",[62,69,70,71,74],{},"Демон или скрипт использует ",[25,72,73],{},"fork",", но завершается сам до того, как дочерние процессы успевают завершиться.",[62,76,77],{},"Сбои в стороннем ПО или контейнерах, где менеджмент процессов настроен некорректно.",[62,79,80],{},"Перегрузка или резкий скачок нагрузки, из-за которого родитель «не успевает» забрать статусы завершившихся детей.",[62,82,83,84,87,88,67],{},"Ручной запуск команд в фоне без должного контроля (например, через ",[25,85,86],{},"&"," в скриптах без последующего ",[25,89,48],{},[16,91,93],{"id":92},"способы-решения","Способы решения",[16,95,97],{"id":96},"способ-1-перезапуск-родительского-сервиса","Способ 1: Перезапуск родительского сервиса",[21,99,100,101,104],{},"Самый надёжный и часто применяемый метод — аккуратно перезапустить процесс, который породил зомби. Для системных служб используйте ",[25,102,103],{},"systemctl",":",[34,106,110],{"className":107,"code":108,"language":109,"meta":40,"style":40},"language-bash shiki shiki-themes github-light github-dark","# Найти родителя\nps -eo stat,pid,ppid,cmd | grep '^Z'\n\n# Перезапустить службу (пример для веб-сервера)\nsudo systemctl restart nginx\n","bash",[25,111,112,121,146,153,159],{"__ignoreMap":40},[113,114,117],"span",{"class":115,"line":116},"line",1,[113,118,120],{"class":119},"sJ8bj","# Найти родителя\n",[113,122,124,128,132,136,140,143],{"class":115,"line":123},2,[113,125,127],{"class":126},"sScJk","ps",[113,129,131],{"class":130},"sj4cs"," -eo",[113,133,135],{"class":134},"sZZnC"," stat,pid,ppid,cmd",[113,137,139],{"class":138},"szBVR"," |",[113,141,142],{"class":126}," grep",[113,144,145],{"class":134}," '^Z'\n",[113,147,149],{"class":115,"line":148},3,[113,150,152],{"emptyLinePlaceholder":151},true,"\n",[113,154,156],{"class":115,"line":155},4,[113,157,158],{"class":119},"# Перезапустить службу (пример для веб-сервера)\n",[113,160,162,165,168,171],{"class":115,"line":161},5,[113,163,164],{"class":126},"sudo",[113,166,167],{"class":134}," systemctl",[113,169,170],{"class":134}," restart",[113,172,173],{"class":134}," nginx\n",[21,175,176],{},"Если это ваше приложение, перезапустите его корректно:",[34,178,180],{"className":107,"code":179,"language":109,"meta":40,"style":40},"# Завершить родителя мягко\nkill -TERM \u003CPPID>\n# Или, если требуется, перезапустить через supervisor/pm2\npm2 restart app-name\n",[25,181,182,187,208,213],{"__ignoreMap":40},[113,183,184],{"class":115,"line":116},[113,185,186],{"class":119},"# Завершить родителя мягко\n",[113,188,189,192,195,198,201,205],{"class":115,"line":123},[113,190,191],{"class":130},"kill",[113,193,194],{"class":130}," -TERM",[113,196,197],{"class":138}," \u003C",[113,199,200],{"class":134},"PPI",[113,202,204],{"class":203},"sVt8B","D",[113,206,207],{"class":138},">\n",[113,209,210],{"class":115,"line":148},[113,211,212],{"class":119},"# Или, если требуется, перезапустить через supervisor/pm2\n",[113,214,215,218,220],{"class":115,"line":155},[113,216,217],{"class":126},"pm2",[113,219,170],{"class":134},[113,221,222],{"class":134}," app-name\n",[224,225,226],"blockquote",{},[21,227,228],{},"⚠️ Важно: если родитель — init (PID 1) или вы не понимаете, за что он отвечает, не завершайте его принудительно. Перезапускайте только те службы, чья роль вам известна.",[16,230,232],{"id":231},"способ-2-принудительная-очистка-через-временный-перезапуск-родителя","Способ 2: Принудительная очистка через временный перезапуск родителя",[21,234,235],{},"Если перезапуск службы невозможен или нежелателен, можно заставить родителя перечитать конфигурацию (SIGHUP), что иногда приводит к корректной уборке зомби:",[34,237,239],{"className":107,"code":238,"language":109,"meta":40,"style":40},"kill -HUP \u003CPPID>\n",[25,240,241],{"__ignoreMap":40},[113,242,243,245,248,250,252,254],{"class":115,"line":116},[113,244,191],{"class":130},[113,246,247],{"class":130}," -HUP",[113,249,197],{"class":138},[113,251,200],{"class":134},[113,253,204],{"class":203},[113,255,207],{"class":138},[21,257,258],{},"Проверьте, исчез ли зомби:",[34,260,262],{"className":107,"code":261,"language":109,"meta":40,"style":40},"ps -eo stat,pid,ppid,cmd | grep '^Z'\n",[25,263,264],{"__ignoreMap":40},[113,265,266,268,270,272,274,276],{"class":115,"line":116},[113,267,127],{"class":126},[113,269,131],{"class":130},[113,271,135],{"class":134},[113,273,139],{"class":138},[113,275,142],{"class":126},[113,277,145],{"class":134},[21,279,280],{},"Если процесс игнорирует сигналы, возможно, потребуется плановое техническое окно для полного перезапуска.",[282,283],"in-article-ad",{},[16,285,287],{"id":286},"способ-3-исправление-кода-или-настройки-приложения","Способ 3: Исправление кода или настройки приложения",[21,289,290,291,293],{},"Если зомби появляются регулярно, проблема, скорее всего, в коде или конфигурации приложения. Для скриптов и демонов убедитесь, что после ",[25,292,73],{}," вызывается ожидание дочернего:",[34,295,299],{"className":296,"code":297,"language":298,"meta":40,"style":40},"language-python shiki shiki-themes github-light github-dark","import os\nimport sys\nimport time\n\npid = os.fork()\nif pid == 0:\n    # Дочерний процесс\n    time.sleep(1)\n    sys.exit(0)\nelse:\n    # Родительский процесс — обязательно дождаться завершения\n    os.waitpid(pid, 0)\n","python",[25,300,301,306,311,316,320,325,331,337,343,349,355,361],{"__ignoreMap":40},[113,302,303],{"class":115,"line":116},[113,304,305],{},"import os\n",[113,307,308],{"class":115,"line":123},[113,309,310],{},"import sys\n",[113,312,313],{"class":115,"line":148},[113,314,315],{},"import time\n",[113,317,318],{"class":115,"line":155},[113,319,152],{"emptyLinePlaceholder":151},[113,321,322],{"class":115,"line":161},[113,323,324],{},"pid = os.fork()\n",[113,326,328],{"class":115,"line":327},6,[113,329,330],{},"if pid == 0:\n",[113,332,334],{"class":115,"line":333},7,[113,335,336],{},"    # Дочерний процесс\n",[113,338,340],{"class":115,"line":339},8,[113,341,342],{},"    time.sleep(1)\n",[113,344,346],{"class":115,"line":345},9,[113,347,348],{},"    sys.exit(0)\n",[113,350,352],{"class":115,"line":351},10,[113,353,354],{},"else:\n",[113,356,358],{"class":115,"line":357},11,[113,359,360],{},"    # Родительский процесс — обязательно дождаться завершения\n",[113,362,364],{"class":115,"line":363},12,[113,365,366],{},"    os.waitpid(pid, 0)\n",[21,368,369],{},"Для сторонних приложений:",[59,371,372,375],{},[62,373,374],{},"Проверьте документацию и обновите ПО до версии, где исправлен менеджмент процессов.",[62,376,377,378,381,382,385,386,67],{},"Включите опции вроде ",[25,379,380],{},"--reap"," или настройте правила перезапуска в systemd (например, ",[25,383,384],{},"KillMode=mixed"," и ",[25,387,388],{},"Restart=on-failure",[16,390,392],{"id":391},"профилактика","Профилактика",[59,394,395,401,408,419,422],{},[62,396,397,398,53],{},"Регулярно проверяйте наличие зомби: ",[25,399,400],{},"ps -eo stat,pid,ppid,cmd | grep '^Z'",[62,402,403,404,407],{},"Включите мониторинг (например, через ",[25,405,406],{},"cron"," + уведомления), если процессы создаются в большом объёме.",[62,409,410,411,413,414,49,416,418],{},"Избегайте «вечных» циклов с ",[25,412,73],{}," без ожидания; всегда используйте ",[25,415,48],{},[25,417,52],{}," или соответствующие абстракции (supervisord, systemd).",[62,420,421],{},"Обновляйте ПО и ОС, чтобы получать исправления, связанные с менеджментом процессов.",[62,423,424,425,428,429,432],{},"Для критичных сервисов настройте ",[25,426,427],{},"systemd"," с правильным ",[25,430,431],{},"KillMode"," и политиками перезапуска, чтобы минимизировать последствия ошибок в коде.",[434,435,436],"style",{},"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 .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 .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":40,"searchDepth":123,"depth":123,"links":438},[439,440,441,442,443,444,445],{"id":18,"depth":123,"text":19},{"id":56,"depth":123,"text":57},{"id":92,"depth":123,"text":93},{"id":96,"depth":123,"text":97},{"id":231,"depth":123,"text":232},{"id":286,"depth":123,"text":287},{"id":391,"depth":123,"text":392},null,"2026-04-27 11:13:58","Пошаговая инструкция, как найти и убрать зомби-процесс в Linux, освободить ресурсы и вернуть системе стабильность. Разбор причин и профилактика.","easy",false,"5-10 мин","md",[454,457,460],{"answer":455,"question":456},"Нет — SIGKILL/SIGTERM на зомби не работают. Нужно завершить родительский процесс или исправить код/настройки приложения, которое не обработало завершение дочернего.","Безопасно ли убивать зомби-процесс напрямую через kill?",{"answer":458,"question":459},"Потому что родитель не вызвал wait/waitpid, чтобы считать статус завершения. Пока родитель не сделает этого, запись в таблице процессов остаётся.","Почему зомби-процесс не исчезает сам?",{"answer":461,"question":462},"Чаще всего из-за багов в приложениях, неправильной обработки сигналов, fork без wait, или перегруженных демонов, создающих дочерние процессы быстрее, чем успевает их собирать.","Из-за чего появляются зомби в больших количествах?",[464,467,470],{"name":465,"text":466},"Найти зомби-процессы","Выполните `ps aux | grep defunct` или `ps -eo stat,pid,ppid,cmd | grep '^Z'`, чтобы увидеть список и их родительские PID.",{"name":468,"text":469},"Определить родительский процесс","Убедитесь, какой процесс (PPID) породил зомби; именно он должен корректно завершить или перезапустить дочерние.",{"name":471,"text":472},"Завершить или перезапустить родителя","Если это безвредный сервис, выполните `systemctl restart имя-службы`. Если нет — аккуратно `kill -HUP \u003CPPID>` или `kill -TERM \u003CPPID>`, чтобы заставить перечитать конфигурацию или завершиться.","PT10M",[475,476,477,478,479],"зомби-процесс linux","zombie process defunct","defunct процесс убить","освободить pid linux","z stat процесс linux","ru_RU",{},"/errors/linux/zombie-process","linux",[485,486],"/errors/linux/high-load","/errors/linux/out-of-memory","Ошибки Linux",{"title":5,"description":448},"medium","errors/linux/zombie-process","Зомби-процесс зависает в таблице процессов и потребляет PID, что может тормозить запуск новых программ. Вы узнаете, как быстро найти его и безопасно устранить.",[493,494,495,27,496],"Linux","Zombie","Process","PID","error","v96lBbHsO_R27pacvHIHkcKc2HT23lFA34mF9oSOIBU",{"data":500,"body":501},{},{"type":502,"children":503},"root",[504],{"type":505,"tag":21,"props":506,"children":507},"element",{},[508],{"type":39,"value":455},{"data":510,"body":511},{},{"type":502,"children":512},[513],{"type":505,"tag":21,"props":514,"children":515},{},[516],{"type":39,"value":458},{"data":518,"body":519},{},{"type":502,"children":520},[521],{"type":505,"tag":21,"props":522,"children":523},{},[524],{"type":39,"value":461},{"data":526,"body":527},{},{"type":502,"children":528},[529],{"type":505,"tag":21,"props":530,"children":531},{},[532,534,540,542,547],{"type":39,"value":533},"Выполните ",{"type":505,"tag":25,"props":535,"children":537},{"className":536},[],[538],{"type":39,"value":539},"ps aux | grep defunct",{"type":39,"value":541}," или ",{"type":505,"tag":25,"props":543,"children":545},{"className":544},[],[546],{"type":39,"value":400},{"type":39,"value":548},", чтобы увидеть список и их родительские PID.",{"data":550,"body":551},{},{"type":502,"children":552},[553],{"type":505,"tag":21,"props":554,"children":555},{},[556],{"type":39,"value":469},{"data":558,"body":559},{},{"type":502,"children":560},[561],{"type":505,"tag":21,"props":562,"children":563},{},[564,566,572,574,580,581,587],{"type":39,"value":565},"Если это безвредный сервис, выполните ",{"type":505,"tag":25,"props":567,"children":569},{"className":568},[],[570],{"type":39,"value":571},"systemctl restart имя-службы",{"type":39,"value":573},". Если нет — аккуратно ",{"type":505,"tag":25,"props":575,"children":577},{"className":576},[],[578],{"type":39,"value":579},"kill -HUP \u003CPPID>",{"type":39,"value":541},{"type":505,"tag":25,"props":582,"children":584},{"className":583},[],[585],{"type":39,"value":586},"kill -TERM \u003CPPID>",{"type":39,"value":588},", чтобы заставить перечитать конфигурацию или завершиться.",[590],{"id":591,"title":592,"appliesTo":593,"author":11,"body":596,"canonical":446,"code":1476,"createdAt":1477,"description":1478,"difficulty":489,"draft":450,"estimatedTime":1479,"extension":452,"faq":1480,"howToSteps":1493,"howToTotalTime":1509,"image":446,"keywords":1510,"locale":480,"meta":1519,"navigation":151,"path":486,"platform":483,"related":1520,"section":487,"seo":1524,"severity":1525,"stem":1526,"summary":1527,"tags":1528,"twitterCreator":446,"twitterSite":446,"type":497,"updatedAt":1477,"__hash__":1533},"content_ru/errors/linux/out-of-memory.md","OOM Killer в Linux: причины и способы решения ошибки нехватки памяти",[594,595],"Linux ядра 3.x и выше","Все дистрибутивы (Ubuntu, CentOS, Debian, RHEL)",{"type":13,"value":597,"toc":1464},[598,602,614,621,627,634,636,669,671,676,679,780,784,787,926,935,939,942,947,950,974,977,994,1007,1037,1041,1048,1072,1083,1117,1122,1126,1136,1282,1286,1295,1387,1389,1391,1461],[16,599,601],{"id":600},"что-означает-ошибка-oom","Что означает ошибка OOM",[21,603,604,608,609,613],{},[605,606,607],"strong",{},"OOM Killer"," (Out-of-Memory Killer) — это механизм ядра Linux, который автоматически завершает один или несколько процессов, когда система исчерпала доступную оперативную память (RAM) и swap-пространство. Это не ошибка приложения, а ",[610,611,612],"em",{},"реакция ядра"," на критическую нехватку памяти, чтобы избежать полного зависания системы.",[21,615,616,617,620],{},"Типичный вывод в логах (",[25,618,619],{},"dmesg","):",[34,622,625],{"className":623,"code":624,"language":39},[37],"[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",[25,626,624],{"__ignoreMap":40},[21,628,629,630,633],{},"Симптомы у пользователя: неожиданное падение сервисов (например, PostgreSQL, Java-приложение, веб-сервер), сообщения ",[25,631,632],{},"Killed"," в терминале при запуске программ, невозможность создать новые процессы.",[16,635,57],{"id":56},[637,638,639,645,651,657,663],"ol",{},[62,640,641,644],{},[605,642,643],{},"Физическая нехватка RAM + swap",". Запущенные процессы потребляют больше памяти, чем доступно физически + в swap. Часто происходит из-за утечек памяти (memory leaks) в долгоживущих приложениях.",[62,646,647,650],{},[605,648,649],{},"Агрессивный overcommit",". Ядро Linux по умолчанию разрешает выделение памяти, которой физически нет (overcommit), полагаясь на то, что приложения её не используют полностью. Если же все процессы решат использовать зарезервированное — OOM Killer сработает.",[62,652,653,656],{},[605,654,655],{},"Конфигурация swap слишком мала или отсутствует",". На системах без swap или с минимальным swap (например, 1-2 ГБ) OOM Killer срабатывает при меньшей нагрузке, так как нет буфера для выгрузки неактивных страниц.",[62,658,659,662],{},[605,660,661],{},"Злонамеренный или buggy процесс",". Процесс может намеренно выделять память (например, fork-бомба) или содержать баг, приводящий к бесконечному росту потребления памяти.",[62,664,665,668],{},[605,666,667],{},"Недостаток cgroup-лимитов",". В контейнерах (Docker) или виртуальных средах, где память ограничена через cgroups, OOM Killer может убить процесс внутри контейнера, даже если на хосте ещё есть свободная память.",[16,670,93],{"id":92},[672,673,675],"h3",{"id":674},"способ-1-быстрая-диагностика-и-освобождение-памяти","Способ 1: Быстрая диагностика и освобождение памяти",[21,677,678],{},"Первым делом определите, какой процесс виновник и сколько памяти свободно.",[637,680,681,705,734,745],{},[62,682,683,684,697,700,701,704],{},"Проверьте общую статистику:",[34,685,687],{"className":107,"code":686,"language":109,"meta":40,"style":40},"free -h\n",[25,688,689],{"__ignoreMap":40},[113,690,691,694],{"class":115,"line":116},[113,692,693],{"class":126},"free",[113,695,696],{"class":130}," -h\n",[698,699],"br",{},"Обратите внимание на строку ",[25,702,703],{},"available"," — это реально доступная память для новых процессов. Если значение близко к нулю — проблема серьёзная.",[62,706,707,708,731,733],{},"Найдите \"тяжёлых\" процессов:",[34,709,711],{"className":107,"code":710,"language":109,"meta":40,"style":40},"ps aux --sort=-%mem | head -10\n",[25,712,713],{"__ignoreMap":40},[113,714,715,717,720,723,725,728],{"class":115,"line":116},[113,716,127],{"class":126},[113,718,719],{"class":134}," aux",[113,721,722],{"class":130}," --sort=-%mem",[113,724,139],{"class":138},[113,726,727],{"class":126}," head",[113,729,730],{"class":130}," -10\n",[698,732],{},"Это покажет топ-10 процессов по потреблению RAM.",[62,735,736,737,740,741,744],{},"Проверьте, нет ли процессов с аномально высоким ",[25,738,739],{},"VIRT"," (виртуальная память), но низким ",[25,742,743],{},"RES"," (физическая) — возможна overcommit-атака.",[62,746,747,750,751,775,777],{},[605,748,749],{},"Если система ещё реагирует",", попробуйте вручную завершить не критичный процесс с высоким потреблением:",[34,752,754],{"className":107,"code":753,"language":109,"meta":40,"style":40},"sudo kill -9 \u003CPID>\n",[25,755,756],{"__ignoreMap":40},[113,757,758,760,763,766,768,771,773],{"class":115,"line":116},[113,759,164],{"class":126},[113,761,762],{"class":134}," kill",[113,764,765],{"class":130}," -9",[113,767,197],{"class":138},[113,769,770],{"class":134},"PI",[113,772,204],{"class":203},[113,774,207],{"class":138},[698,776],{},[610,778,779],{},"Используйте с осторожностью, только если уверены в природе процесса.",[672,781,783],{"id":782},"способ-2-добавление-или-увеличение-swap-файла","Способ 2: Добавление или увеличение swap-файла",[21,785,786],{},"Если у вас мало swap (например, менее размера RAM), создайте дополнительный swap-файл. Это даст ядру больше \"воздуха\".",[637,788,789,825,854,871,904],{},[62,790,791,792,813,815],{},"Создайте файл размером 4 ГБ (подберите размер под нагрузку):",[34,793,795],{"className":107,"code":794,"language":109,"meta":40,"style":40},"sudo fallocate -l 4G /swapfile\n",[25,796,797],{"__ignoreMap":40},[113,798,799,801,804,807,810],{"class":115,"line":116},[113,800,164],{"class":126},[113,802,803],{"class":134}," fallocate",[113,805,806],{"class":130}," -l",[113,808,809],{"class":134}," 4G",[113,811,812],{"class":134}," /swapfile\n",[698,814],{},[610,816,817,818,821,822,53],{},"Если ",[25,819,820],{},"fallocate"," недоступен, используйте ",[25,823,824],{},"dd if=/dev/zero of=/swapfile bs=1M count=4096",[62,826,827,828],{},"Установите правильные права и подготовьте как swap:",[34,829,831],{"className":107,"code":830,"language":109,"meta":40,"style":40},"sudo chmod 600 /swapfile\nsudo mkswap /swapfile\n",[25,832,833,845],{"__ignoreMap":40},[113,834,835,837,840,843],{"class":115,"line":116},[113,836,164],{"class":126},[113,838,839],{"class":134}," chmod",[113,841,842],{"class":130}," 600",[113,844,812],{"class":134},[113,846,847,849,852],{"class":115,"line":123},[113,848,164],{"class":126},[113,850,851],{"class":134}," mkswap",[113,853,812],{"class":134},[62,855,856,857],{},"Активируйте swap:",[34,858,860],{"className":107,"code":859,"language":109,"meta":40,"style":40},"sudo swapon /swapfile\n",[25,861,862],{"__ignoreMap":40},[113,863,864,866,869],{"class":115,"line":116},[113,865,164],{"class":126},[113,867,868],{"class":134}," swapon",[113,870,812],{"class":134},[62,872,873,874,104,877],{},"Чтобы swap включался автоматически при загрузке, добавьте строку в ",[25,875,876],{},"/etc/fstab",[34,878,880],{"className":107,"code":879,"language":109,"meta":40,"style":40},"echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab\n",[25,881,882],{"__ignoreMap":40},[113,883,884,887,890,892,895,898,901],{"class":115,"line":116},[113,885,886],{"class":130},"echo",[113,888,889],{"class":134}," '/swapfile none swap sw 0 0'",[113,891,139],{"class":138},[113,893,894],{"class":126}," sudo",[113,896,897],{"class":134}," tee",[113,899,900],{"class":130}," -a",[113,902,903],{"class":134}," /etc/fstab\n",[62,905,906,907],{},"Проверьте:",[34,908,910],{"className":107,"code":909,"language":109,"meta":40,"style":40},"swapon --show\nfree -h\n",[25,911,912,920],{"__ignoreMap":40},[113,913,914,917],{"class":115,"line":116},[113,915,916],{"class":126},"swapon",[113,918,919],{"class":130}," --show\n",[113,921,922,924],{"class":115,"line":123},[113,923,693],{"class":126},[113,925,696],{"class":130},[224,927,928],{},[21,929,930,931,934],{},"⚠️ ",[605,932,933],{},"Важно",": Swap на SSD ускорит работу, но увеличит износ. Для серверов с большим RAM (16+ ГБ) swap может быть минимальным (2-4 ГБ) или отключённым, но тогда OOM Killer сработает быстрее.",[672,936,938],{"id":937},"способ-3-настройка-oom-политики-для-конкретных-процессов","Способ 3: Настройка OOM-политики для конкретных процессов",[21,940,941],{},"Иногда нужно защитить критичный сервис (например, базу данных) от убийства, пожертвовав менее важным.",[943,944,946],"h4",{"id":945},"для-системd-сервисов-современные-дистрибутивы","Для системd-сервисов (современные дистрибутивы)",[21,948,949],{},"Создайте override-конфигурацию для сервиса:",[34,951,953],{"className":107,"code":952,"language":109,"meta":40,"style":40},"sudo systemctl edit \u003Cимя_сервиса>\n",[25,954,955],{"__ignoreMap":40},[113,956,957,959,961,964,966,969,972],{"class":115,"line":116},[113,958,164],{"class":126},[113,960,167],{"class":134},[113,962,963],{"class":134}," edit",[113,965,197],{"class":138},[113,967,968],{"class":134},"имя_сервис",[113,970,971],{"class":203},"а",[113,973,207],{"class":138},[21,975,976],{},"В открывшемся редакторе добавьте:",[34,978,982],{"className":979,"code":980,"language":981,"meta":40,"style":40},"language-ini shiki shiki-themes github-light github-dark","[Service]\nOOMScoreAdjust=-900\n","ini",[25,983,984,989],{"__ignoreMap":40},[113,985,986],{"class":115,"line":116},[113,987,988],{},"[Service]\n",[113,990,991],{"class":115,"line":123},[113,992,993],{},"OOMScoreAdjust=-900\n",[21,995,996],{},[610,997,998,999,1002,1003,1006],{},"Значение ",[25,1000,1001],{},"-1000"," — абсолютная защита (ядро не будет убивать такой процесс даже при тотальном OOM). ",[25,1004,1005],{},"-900"," — очень низкий приоритет на убийство. Сохраните и перезапустите сервис:",[34,1008,1010],{"className":107,"code":1009,"language":109,"meta":40,"style":40},"sudo systemctl daemon-reload\nsudo systemctl restart \u003Cимя_сервиса>\n",[25,1011,1012,1021],{"__ignoreMap":40},[113,1013,1014,1016,1018],{"class":115,"line":116},[113,1015,164],{"class":126},[113,1017,167],{"class":134},[113,1019,1020],{"class":134}," daemon-reload\n",[113,1022,1023,1025,1027,1029,1031,1033,1035],{"class":115,"line":123},[113,1024,164],{"class":126},[113,1026,167],{"class":134},[113,1028,170],{"class":134},[113,1030,197],{"class":138},[113,1032,968],{"class":134},[113,1034,971],{"class":203},[113,1036,207],{"class":138},[943,1038,1040],{"id":1039},"для-ручных-процессов","Для ручных процессов",[21,1042,1043,1044,1047],{},"Запустите процесс с изменённым OOM-скорингом через ",[25,1045,1046],{},"systemd-run"," (если система использует systemd):",[34,1049,1051],{"className":107,"code":1050,"language":109,"meta":40,"style":40},"systemd-run --scope -p OOMScoreAdjust=-500 ./ваша_программа\n",[25,1052,1053],{"__ignoreMap":40},[113,1054,1055,1057,1060,1063,1066,1069],{"class":115,"line":116},[113,1056,1046],{"class":126},[113,1058,1059],{"class":130}," --scope",[113,1061,1062],{"class":130}," -p",[113,1064,1065],{"class":134}," OOMScoreAdjust=",[113,1067,1068],{"class":130},"-500",[113,1070,1071],{"class":134}," ./ваша_программа\n",[21,1073,1074,1075,1078,1079,1082],{},"Или через ",[25,1076,1077],{},"prctl"," в коде (для разработчиков). Для уже запущенного процесса изменить ",[25,1080,1081],{},"oom_score_adj"," можно:",[34,1084,1086],{"className":107,"code":1085,"language":109,"meta":40,"style":40},"echo -1000 | sudo tee /proc/\u003CPID>/oom_score_adj\n",[25,1087,1088],{"__ignoreMap":40},[113,1089,1090,1092,1095,1097,1099,1101,1104,1107,1109,1111,1114],{"class":115,"line":116},[113,1091,886],{"class":130},[113,1093,1094],{"class":130}," -1000",[113,1096,139],{"class":138},[113,1098,894],{"class":126},[113,1100,897],{"class":134},[113,1102,1103],{"class":134}," /proc/",[113,1105,1106],{"class":138},"\u003C",[113,1108,770],{"class":134},[113,1110,204],{"class":203},[113,1112,1113],{"class":138},">",[113,1115,1116],{"class":134},"/oom_score_adj\n",[21,1118,1119],{},[610,1120,1121],{},"Требует прав root, изменение временное (до перезапуска процесса).",[672,1123,1125],{"id":1124},"способ-4-тюнинг-ядра-overcommit-и-watermark","Способ 4: Тюнинг ядра — overcommit и watermark",[21,1127,1128,1129,1132,1133,53],{},"Эти настройки глобальные и требуют понимания. Редактируйте ",[25,1130,1131],{},"/etc/sysctl.conf"," или создайте файл в ",[25,1134,1135],{},"/etc/sysctl.d/",[637,1137,1138,1206,1239],{},[62,1139,1140,1143,1144,1147,1148,1151,1152,1155,1156,1194,1196],{},[605,1141,1142],{},"Уменьшите агрессивность overcommit"," (по умолчанию ",[25,1145,1146],{},"0"," — heuristic overcommit, ",[25,1149,1150],{},"1"," — всегда overcommit, ",[25,1153,1154],{},"2"," — строгий режим):",[34,1157,1159],{"className":107,"code":1158,"language":109,"meta":40,"style":40},"sudo sysctl -w vm.overcommit_memory=2\nsudo sysctl -w vm.overcommit_ratio=80  # Разрешить выделять не более 80% RAM+swap\n",[25,1160,1161,1177],{"__ignoreMap":40},[113,1162,1163,1165,1168,1171,1174],{"class":115,"line":116},[113,1164,164],{"class":126},[113,1166,1167],{"class":134}," sysctl",[113,1169,1170],{"class":130}," -w",[113,1172,1173],{"class":134}," vm.overcommit_memory=",[113,1175,1176],{"class":130},"2\n",[113,1178,1179,1181,1183,1185,1188,1191],{"class":115,"line":123},[113,1180,164],{"class":126},[113,1182,1167],{"class":134},[113,1184,1170],{"class":130},[113,1186,1187],{"class":134}," vm.overcommit_ratio=",[113,1189,1190],{"class":130},"80",[113,1192,1193],{"class":119},"  # Разрешить выделять не более 80% RAM+swap\n",[698,1195],{},[610,1197,1198,1199,1201,1202,1205],{},"В режиме ",[25,1200,1154],{}," ядро будет отклонять запросы на ",[25,1203,1204],{},"malloc()",", если не хватит памяти, что предотвратит OOM, но может сломать некоторые приложения, ожидающие overcommit.",[62,1207,1208,1211,1212,1234,1236],{},[605,1209,1210],{},"Настройте watermark'ы"," — пороги, при которых ядро начинает активный OOM Killer:",[34,1213,1215],{"className":107,"code":1214,"language":109,"meta":40,"style":40},"sudo sysctl -w vm.min_free_kbytes=65536  # Минимальный резерв свободной памяти (в КБ). Увеличьте, если OOM срабатывает при наличии памяти.\n",[25,1216,1217],{"__ignoreMap":40},[113,1218,1219,1221,1223,1225,1228,1231],{"class":115,"line":116},[113,1220,164],{"class":126},[113,1222,1167],{"class":134},[113,1224,1170],{"class":130},[113,1226,1227],{"class":134}," vm.min_free_kbytes=",[113,1229,1230],{"class":130},"65536",[113,1232,1233],{"class":119},"  # Минимальный резерв свободной памяти (в КБ). Увеличьте, если OOM срабатывает при наличии памяти.\n",[698,1235],{},[610,1237,1238],{},"Будьте осторожны: слишком высокое значение может привести к неэффективному использованию памяти.",[62,1240,1241,1242],{},"Внесите изменения постоянно:",[34,1243,1245],{"className":107,"code":1244,"language":109,"meta":40,"style":40},"echo \"vm.overcommit_memory=2\" | sudo tee -a /etc/sysctl.conf\necho \"vm.overcommit_ratio=80\" | sudo tee -a /etc/sysctl.conf\n",[25,1246,1247,1265],{"__ignoreMap":40},[113,1248,1249,1251,1254,1256,1258,1260,1262],{"class":115,"line":116},[113,1250,886],{"class":130},[113,1252,1253],{"class":134}," \"vm.overcommit_memory=2\"",[113,1255,139],{"class":138},[113,1257,894],{"class":126},[113,1259,897],{"class":134},[113,1261,900],{"class":130},[113,1263,1264],{"class":134}," /etc/sysctl.conf\n",[113,1266,1267,1269,1272,1274,1276,1278,1280],{"class":115,"line":123},[113,1268,886],{"class":130},[113,1270,1271],{"class":134}," \"vm.overcommit_ratio=80\"",[113,1273,139],{"class":138},[113,1275,894],{"class":126},[113,1277,897],{"class":134},[113,1279,900],{"class":130},[113,1281,1264],{"class":134},[672,1283,1285],{"id":1284},"способ-5-анализ-и-исправление-утечек-памяти","Способ 5: Анализ и исправление утечек памяти",[21,1287,1288,1289,541,1292,1294],{},"Если OOM Killer периодически убивает один и тот же процесс (например, ",[25,1290,1291],{},"java",[25,1293,298],{},"), вероятна утечка.",[637,1296,1297,1319,1369,1380],{},[62,1298,1299,1300],{},"Мониторинг в реальном времени:",[34,1301,1303],{"className":107,"code":1302,"language":109,"meta":40,"style":40},"watch -n 1 'ps aux --sort=-%mem | head -5'\n",[25,1304,1305],{"__ignoreMap":40},[113,1306,1307,1310,1313,1316],{"class":115,"line":116},[113,1308,1309],{"class":126},"watch",[113,1311,1312],{"class":130}," -n",[113,1314,1315],{"class":130}," 1",[113,1317,1318],{"class":134}," 'ps aux --sort=-%mem | head -5'\n",[62,1320,1321,1322,541,1325,1328,1329,1364,1366],{},"Для Java-приложений используйте ",[25,1323,1324],{},"jcmd",[25,1326,1327],{},"jmap"," для анализа heap:",[34,1330,1332],{"className":107,"code":1331,"language":109,"meta":40,"style":40},"jcmd \u003CPID> GC.heap_info\njmap -dump:live,format=b,file=heap.hprof \u003CPID>\n",[25,1333,1334,1349],{"__ignoreMap":40},[113,1335,1336,1338,1340,1342,1344,1346],{"class":115,"line":116},[113,1337,1324],{"class":126},[113,1339,197],{"class":138},[113,1341,770],{"class":134},[113,1343,204],{"class":203},[113,1345,1113],{"class":138},[113,1347,1348],{"class":134}," GC.heap_info\n",[113,1350,1351,1353,1356,1358,1360,1362],{"class":115,"line":123},[113,1352,1327],{"class":126},[113,1354,1355],{"class":130}," -dump:live,format=b,file=heap.hprof",[113,1357,197],{"class":138},[113,1359,770],{"class":134},[113,1361,204],{"class":203},[113,1363,207],{"class":138},[698,1365],{},[610,1367,1368],{},"Затем проанализируйте дамп через MAT (Memory Analyzer Tool).",[62,1370,1371,1372,1375,1376,1379],{},"Для процессов на C/C++ используйте ",[25,1373,1374],{},"valgrind --tool=memcheck"," при тестировании, или ",[25,1377,1378],{},"pmap -x \u003CPID>"," для просмотра детального распределения памяти.",[62,1381,1382,1383,1386],{},"Проверьте логи приложения на предмет ошибок, связанных с памятью (например, ",[25,1384,1385],{},"OutOfMemoryError"," в Java).",[282,1388],{},[16,1390,392],{"id":391},[59,1392,1393,1413,1419,1433,1439,1448],{},[62,1394,1395,1398,1399,1402,1403,1402,1406,1409,1410,67],{},[605,1396,1397],{},"Регулярный мониторинг",". Настройте алерты (через Prometheus+Grafana, Zabbix, Netdata) на ключевые метрики: ",[25,1400,1401],{},"mem.available",", ",[25,1404,1405],{},"vmstat.si/so",[25,1407,1408],{},"oom_kill"," (счётчик в ",[25,1411,1412],{},"/proc/vmstat",[62,1414,1415,1418],{},[605,1416,1417],{},"Адекватный swap",". Размер swap рекомендуется как минимум равен размеру RAM для настольных систем, для серверов — от 1/2 до 1× RAM в зависимости от нагрузки.",[62,1420,1421,1424,1425,1428,1429,1432],{},[605,1422,1423],{},"Ограничение ресурсов через cgroups",". Для контейнеров и сервисов явно задавайте лимиты памяти (",[25,1426,1427],{},"memory.limit_in_bytes"," в Docker или ",[25,1430,1431],{},"MemoryMax"," в systemd), чтобы OOM Killer срабатывал внутри изолированной группы, а не на всём хосте.",[62,1434,1435,1438],{},[605,1436,1437],{},"Обновление ПО",". Утечки памяти часто исправляются в обновлениях. Следите за changelog критичных приложений (базы данных, веб-серверы, виртуализация).",[62,1440,1441,1447],{},[605,1442,1443,1444,1446],{},"Настройка ",[25,1445,1081],{}," для важных сервисов",". Как показано в Способе 3, защитите ключевые процессы от автоматического убийства.",[62,1449,1450,1453,1454,541,1457,1460],{},[605,1451,1452],{},"Планирование нагрузки",". Зная пиковые нагрузки, рассчитайте необходимый объём RAM + swap. Используйте ",[25,1455,1456],{},"stress-ng",[25,1458,1459],{},"memtester"," для тестирования стабильности под давлением.",[434,1462,1463],{},"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":40,"searchDepth":123,"depth":123,"links":1465},[1466,1467,1468,1475],{"id":600,"depth":123,"text":601},{"id":56,"depth":123,"text":57},{"id":92,"depth":123,"text":93,"children":1469},[1470,1471,1472,1473,1474],{"id":674,"depth":148,"text":675},{"id":782,"depth":148,"text":783},{"id":937,"depth":148,"text":938},{"id":1124,"depth":148,"text":1125},{"id":1284,"depth":148,"text":1285},{"id":391,"depth":123,"text":392},"OOM","2026-04-08 22:50:26","Система Linux убивает ваши процессы? Узнайте, как работает OOM Killer, диагностировать нехватку памяти и aplicar проверенные решения. Пошаговая инструкция за 15 минут.","15-30 мин",[1481,1484,1487,1490],{"question":1482,"answer":1483},"Почему Linux убивает мои процессы при наличии свободной памяти?","OOM Killer срабатывает не только при полном исчерпании RAM, но и при нехватке *доступной* памяти для выделения под новые процессы, учитывая overcommit и резервы ядра.",{"question":1485,"answer":1486},"Как узнать, какой процесс был убит OOM?","Используйте команду `dmesg | grep -i 'killed process'` или `journalctl -k | grep -i oom`. В логах будет указан PID и имя процесса.",{"question":1488,"answer":1489},"Можно ли полностью отключить OOM Killer?","Теоретически можно через `sysctl vm.panic_on_oom=1`, но это крайне не рекомендуется — система может полностью зависнуть. Лучше настроить политику (`oom_score_adj`) или добавить памяти.",{"question":1491,"answer":1492},"Чем OOM Killer отличается от swap?","Swap — это механизм выгрузки неактивных страниц памяти на диск. OOM Killer — крайняя мера, когда даже swap исчерпан и ядро не может найти память для критических операций.",[1494,1497,1500,1503,1506],{"name":1495,"text":1496},"Диагностика: проверьте использование памяти иswap","Выполните команды `free -h` и `vmstat 1 5`, чтобы оценить текущую загрузку RAM и swap. Обратите внимание на столбцы `available` и `si/so` (swap in/out).",{"name":1498,"text":1499},"Найдите процесс-жертву в системных логах","Используйте `dmesg -T | grep -i 'out of memory'` или `journalctl -k --since \"1 hour ago\" | grep -i oom`. Вывод покажет PID, имя процесса и оценку (oom_score), по которой он был выбран.",{"name":1501,"text":1502},"Временно увеличьте swap-пространство","Если swap мало или отсутствует, создайте временный файл подкачки: `sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile`. Это даст системе буфер.",{"name":1504,"text":1505},"Настройте overcommit и политику OOM для конкретного сервиса","Для критичного процесса (например, базы данных) уменьшите его `oom_score_adj` через systemd: создайте дроп-ин `/etc/systemd/system/\u003Cservice>.service.d/override.conf` с `[Service] OOMScoreAdjust=-900`. Перезапустите сервис.",{"name":1507,"text":1508},"Оптимизируйте приложение или добавьте физической памяти","Проанализируйте утечки памяти в приложении (например, через `valgrind` или `pmap`). Если нагрузка закономерна — рассмотрите масштабирование (горизонтальное или вертикальное).","PT20M",[1511,1512,1513,1514,1515,1516,1517,1518],"oom killer linux","out of memory error linux","система убила процесс linux","нехватка памяти linux как исправить","linux oom kill процесс","ошибка oom что делать","memory overcommit linux","dmesg out of memory",{},[1521,1522,1523],"/errors/linux/disk-space-full","/guides/linux/monitor-memory-usage","/errors/linux/segmentation-fault",{"title":592,"description":1478},"high","errors/linux/out-of-memory","Статья объясняет, что такое OOM Killer (Out of Memory Killer), почему ядро Linux принудительно завершает процессы и как это исправить. Вы научитесь диагностировать нехватку памяти и настроить систему для стабильной работы.",[1529,607,1530,1531,1532],"ошибки linux","memory management","sysadmin","kernel","pksz1e2acATOXe3_qhFCPVOu4sXaWU_Wor8-9pcYG2o"]