[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/errors/linux/stack-overflow":3,"mdc-vvzjht-key":460,"mdc--yz9i84-key":471,"mdc-2zdzis-key":487,"mdc-ie6vv6-key":511,"mdc--aryu7a-key":528,"mdc--2bm8g-key":544,"mdc--hcwioa-key":568,"mdc-n5u0t4-key":601,"related-/errors/linux/segfault-c,/guides/linux/increase-ulimit,/guides/linux/gdb-debug-basics":633},{"id":4,"title":5,"appliesTo":6,"author":11,"body":12,"canonical":398,"code":399,"createdAt":400,"description":401,"difficulty":402,"draft":403,"estimatedTime":404,"extension":405,"faq":406,"howToSteps":419,"howToTotalTime":432,"image":398,"keywords":433,"locale":440,"meta":441,"navigation":442,"path":443,"platform":444,"related":445,"section":449,"seo":450,"severity":402,"stem":451,"summary":452,"tags":453,"twitterCreator":398,"twitterSite":398,"type":458,"updatedAt":400,"__hash__":459},"content_ru/errors/linux/stack-overflow.md","Переполнение стека в Linux: причины и быстрое исправление",[7,8,9,10],"Ubuntu 20.04/22.04/24.04 LTS","Debian 11/12","Fedora 38+","Любые дистрибутивы Linux с ядром 5.0+","FixPedia Team",{"type":13,"value":14,"toc":387},"minimark",[15,20,37,41,78,82,90,93,98,118,124,156,161,175,179,182,187,204,217,234,243,246,250,253,258,283,288,315,324,340,353,357,383],[16,17,19],"h2",{"id":18},"что-означает-ошибка-stack-overflow-sigsegv-11","Что означает ошибка Stack overflow / SIGSEGV (11)",[21,22,23,24,28,29,32,33,36],"p",{},"В Linux эта проблема проявляется как сигнал ",[25,26,27],"code",{},"SIGSEGV"," с сообщением ",[25,30,31],{},"Segmentation fault (core dumped)"," или ",[25,34,35],{},"Stack smashing detected",". Ошибка возникает, когда процесс исчерпывает выделенную ему область памяти стека. По умолчанию в большинстве дистрибутивов лимит жёстко зафиксирован на уровне 8 МБ. Если программа пытается записать данные за пределы этого участка, ядро Linux аварийно завершает процесс, чтобы предотвратить повреждение соседних областей памяти или сбой всей системы.",[16,38,40],{"id":39},"причины-возникновения","Причины возникновения",[42,43,44,52,62,72],"ol",{},[45,46,47,51],"li",{},[48,49,50],"strong",{},"Бесконечная или слишком глубокая рекурсия."," Функция вызывает саму себя без корректного условия выхода, быстро заполняя стек кадрами вызовов.",[45,53,54,57,58,61],{},[48,55,56],{},"Объявление крупных локальных массивов."," Попытка создать массив размером в несколько мегабайт внутри функции (например, ",[25,59,60],{},"double matrix[1000][1000]",") мгновенно резервирует место в стеке и вызывает сбой.",[45,63,64,67,68,71],{},[48,65,66],{},"Некорректная настройка потоков."," При создании потоков через ",[25,69,70],{},"pthread_create"," можно вручную задать слишком маленький размер стека, который не подходит для вашей бизнес-логики.",[45,73,74,77],{},[48,75,76],{},"Переполнение буфера."," Запись данных за границы выделенной переменной активирует защиту компилятора (stack canary) и принудительно останавливает выполнение приложения.",[16,79,81],{"id":80},"способы-решения","Способы решения",[83,84,86,87],"h3",{"id":85},"способ-1-временное-увеличение-лимита-через-ulimit","Способ 1: Временное увеличение лимита через ",[25,88,89],{},"ulimit",[21,91,92],{},"Если вам нужно срочно запустить программу для тестирования или обработки данных, проще всего снять ограничение только для текущей сессии терминала.",[42,94,95],{},[45,96,97],{},"Проверьте текущий лимит в килобайтах:",[99,100,105],"pre",{"className":101,"code":102,"language":103,"meta":104,"style":104},"language-bash shiki shiki-themes github-light github-dark","ulimit -s\n","bash","",[25,106,107],{"__ignoreMap":104},[108,109,112,115],"span",{"class":110,"line":111},"line",1,[108,113,89],{"class":114},"sj4cs",[108,116,117],{"class":114}," -s\n",[42,119,121],{"start":120},2,[45,122,123],{},"Увеличьте лимит до 16 МБ или снимите его полностью:",[99,125,127],{"className":101,"code":126,"language":103,"meta":104,"style":104},"ulimit -s 16384\n# или полностью снять ограничение для сессии\nulimit -s unlimited\n",[25,128,129,139,145],{"__ignoreMap":104},[108,130,131,133,136],{"class":110,"line":111},[108,132,89],{"class":114},[108,134,135],{"class":114}," -s",[108,137,138],{"class":114}," 16384\n",[108,140,141],{"class":110,"line":120},[108,142,144],{"class":143},"sJ8bj","# или полностью снять ограничение для сессии\n",[108,146,148,150,152],{"class":110,"line":147},3,[108,149,89],{"class":114},[108,151,135],{"class":114},[108,153,155],{"class":154},"sZZnC"," unlimited\n",[42,157,158],{"start":147},[45,159,160],{},"Запустите вашу программу в том же окне терминала. Изменения действуют до закрытия сессии и не влияют на другие запущенные сервисы.",[162,163,164],"blockquote",{},[21,165,166,167,170,171,174],{},"💡 Совет: Значение ",[25,168,169],{},"unlimited"," снимает жёсткое ограничение оболочки, но процесс всё равно ограничен физической оперативной памятью и параметром ",[25,172,173],{},"vm.max_map_count"," ядра.",[83,176,178],{"id":177},"способ-2-постоянное-изменение-лимита-через-pam","Способ 2: Постоянное изменение лимита через PAM",[21,180,181],{},"Чтобы изменения сохранялись после перезагрузки и применялись автоматически при входе, отредактируйте глобальную конфигурацию лимитов.",[42,183,184],{},[45,185,186],{},"Откройте файл конфигурации с правами суперпользователя:",[99,188,190],{"className":101,"code":189,"language":103,"meta":104,"style":104},"sudo nano /etc/security/limits.conf\n",[25,191,192],{"__ignoreMap":104},[108,193,194,198,201],{"class":110,"line":111},[108,195,197],{"class":196},"sScJk","sudo",[108,199,200],{"class":154}," nano",[108,202,203],{"class":154}," /etc/security/limits.conf\n",[42,205,206],{"start":120},[45,207,208,209,212,213,216],{},"Добавьте в конец файла строки (замените ",[25,210,211],{},"username"," на ваше имя или используйте ",[25,214,215],{},"*"," для всех пользователей):",[99,218,222],{"className":219,"code":220,"language":221,"meta":104,"style":104},"language-ini shiki shiki-themes github-light github-dark","username soft stack 32768\nusername hard stack 32768\n","ini",[25,223,224,229],{"__ignoreMap":104},[108,225,226],{"class":110,"line":111},[108,227,228],{},"username soft stack 32768\n",[108,230,231],{"class":110,"line":120},[108,232,233],{},"username hard stack 32768\n",[42,235,236],{"start":147},[45,237,238,239,242],{},"Сохраните файл, полностью выйдите из системы и войдите снова. Проверьте применение изменений командой ",[25,240,241],{},"ulimit -s",".",[244,245],"in-article-ad",{},[83,247,249],{"id":248},"способ-3-поиск-и-исправление-проблемного-кода-с-gdb","Способ 3: Поиск и исправление проблемного кода с GDB",[21,251,252],{},"Увеличение стека — лишь временная мера. Если ошибка вызвана архитектурными недочётами программы, её необходимо найти и исправить на уровне исходного кода.",[42,254,255],{},[45,256,257],{},"Скомпилируйте проект с отладочными символами:",[99,259,261],{"className":101,"code":260,"language":103,"meta":104,"style":104},"gcc -g -O0 -o my_app main.c\n",[25,262,263],{"__ignoreMap":104},[108,264,265,268,271,274,277,280],{"class":110,"line":111},[108,266,267],{"class":196},"gcc",[108,269,270],{"class":114}," -g",[108,272,273],{"class":114}," -O0",[108,275,276],{"class":114}," -o",[108,278,279],{"class":154}," my_app",[108,281,282],{"class":154}," main.c\n",[42,284,285],{"start":120},[45,286,287],{},"Запустите отладчик и выполните программу:",[99,289,291],{"className":101,"code":290,"language":103,"meta":104,"style":104},"gdb ./my_app\n(gdb) run\n",[25,292,293,301],{"__ignoreMap":104},[108,294,295,298],{"class":110,"line":111},[108,296,297],{"class":196},"gdb",[108,299,300],{"class":154}," ./my_app\n",[108,302,303,307,309,312],{"class":110,"line":120},[108,304,306],{"class":305},"sVt8B","(",[108,308,297],{"class":196},[108,310,311],{"class":305},") ",[108,313,314],{"class":196},"run\n",[42,316,317],{"start":147},[45,318,319,320,323],{},"При падении введите ",[25,321,322],{},"bt"," (backtrace) для просмотра полного стека вызовов:",[99,325,327],{"className":101,"code":326,"language":103,"meta":104,"style":104},"(gdb) bt\n",[25,328,329],{"__ignoreMap":104},[108,330,331,333,335,337],{"class":110,"line":111},[108,332,306],{"class":305},[108,334,297],{"class":196},[108,336,311],{"class":305},[108,338,339],{"class":196},"bt\n",[42,341,343],{"start":342},4,[45,344,345,346,32,349,352],{},"Найдите повторяющуюся функцию или укажите на строку в вашем коде. Измените логику: замените рекурсию на итеративный цикл, а крупные локальные массивы перенесите в кучу через ",[25,347,348],{},"malloc()",[25,350,351],{},"std::vector",". Скомпилируйте заново и протестируйте.",[16,354,356],{"id":355},"профилактика","Профилактика",[21,358,359,360,363,364,367,368,371,372,375,376,32,379,382],{},"Регулярная проверка кода на предмет утечек и аномалий экономит часы отладки. Всегда компилируйте проекты с включёнными флагами безопасности: ",[25,361,362],{},"-fstack-protector-strong"," и ",[25,365,366],{},"-Wall -Wextra",". Для многопоточных приложений явно задавайте размер стека через ",[25,369,370],{},"pthread_attr_setstacksize()",", а не полагайтесь на системный дефолт. Если работаете с большими структурами данных, размещайте их в динамической памяти (куче) или используйте ",[25,373,374],{},"static"," для глобального доступа. Настройте статический анализ в CI/CD пайплайне с помощью инструментов вроде ",[25,377,378],{},"Valgrind",[25,380,381],{},"AddressSanitizer",", чтобы отлавливать переполнения до выкатки в продакшен.",[384,385,386],"style",{},"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 .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":104,"searchDepth":120,"depth":120,"links":388},[389,390,391,397],{"id":18,"depth":120,"text":19},{"id":39,"depth":120,"text":40},{"id":80,"depth":120,"text":81,"children":392},[393,395,396],{"id":85,"depth":147,"text":394},"Способ 1: Временное увеличение лимита через ulimit",{"id":177,"depth":147,"text":178},{"id":248,"depth":147,"text":249},{"id":355,"depth":120,"text":356},null,"SIGSEGV (11)","2026-04-08 00:15:25","Столкнулись с ошибкой Stack overflow или SIGSEGV в Linux? Узнайте точные причины и получите пошаговую инструкцию по увеличению лимита и отладке за 10 минут.","medium",false,"10-15 мин","md",[407,410,413,416],{"question":408,"answer":409},"Почему возникает ошибка Stack overflow при запуске программы?","Процесс превысил системный лимит стека (обычно 8 МБ). Это происходит из-за бесконечной рекурсии, слишком больших локальных массивов или глубоких цепочек вызовов функций.",{"question":411,"answer":412},"Безопасно ли увеличивать размер стека через ulimit?","Да, это безопасный временный параметр для текущей сессии терминала. Он не влияет на другие процессы и сбрасывается при перезагрузке. Для постоянных изменений используйте `limits.conf`.",{"question":414,"answer":415},"Как отличить переполнение стека от нехватки оперативной памяти?","Переполнение стека (`SIGSEGV`) затрагивает только один процесс и вызывается исчерпанием лимита вызовов. OOM-killer (`Out of memory`) останавливает процесс при полном исчерпании RAM и swap.",{"question":417,"answer":418},"Можно ли отключить защиту компилятора от переполнения?","Технически можно скомпилировать с флагом `-fno-stack-protector`, но это крайне не рекомендуется. Отключение защиты делает программу уязвимой к эксплойтам переполнения буфера.",[420,423,426,429],{"name":421,"text":422},"Проверка текущего лимита стека","Выполните в терминале команду `ulimit -s`, чтобы узнать текущий размер стека в килобайтах. Стандартное значение обычно равно 8192 (8 МБ).",{"name":424,"text":425},"Временное увеличение лимита","Введите `ulimit -s 16384` или `ulimit -s unlimited`. Это применится только к текущей сессии и процессам, запущенным из неё.",{"name":427,"text":428},"Постоянная настройка через limits.conf","Откройте `/etc/security/limits.conf` через `sudo nano`, добавьте строку `* soft stack 16384` и перезайдите в систему для применения изменений.",{"name":430,"text":431},"Отладка с помощью GDB","Запустите программу командой `gdb ./ваша_программа`, затем введите `run`. При падении используйте `bt`, чтобы увидеть стек вызовов и найти проблемную функцию.","PT15M",[434,435,436,437,438,439,35],"stack overflow linux","ошибка переполнения стека","SIGSEGV 11 linux исправить","увеличить ulimit stack","Segmentation fault стек","как отладить stack overflow","ru_RU",{},true,"/errors/linux/stack-overflow","linux",[446,447,448],"/errors/linux/segfault-c","/guides/linux/increase-ulimit","/guides/linux/gdb-debug-basics","Ошибки Linux",{"title":5,"description":401},"errors/linux/stack-overflow","Ошибка Stack overflow в Linux возникает при превышении лимита памяти стека. Разберём причины сбоя и покажем проверенные способы увеличения лимита и исправления кода.",[454,455,27,89,456,457],"linux-errors","переполнение-стека","debugging","memory-management","error","221A_H9UCJr4WnR3gLrSo06rVGsORlDpyM5e02aKsSw",{"data":461,"body":462},{},{"type":463,"children":464},"root",[465],{"type":466,"tag":21,"props":467,"children":468},"element",{},[469],{"type":470,"value":409},"text",{"data":472,"body":473},{},{"type":463,"children":474},[475],{"type":466,"tag":21,"props":476,"children":477},{},[478,480,486],{"type":470,"value":479},"Да, это безопасный временный параметр для текущей сессии терминала. Он не влияет на другие процессы и сбрасывается при перезагрузке. Для постоянных изменений используйте ",{"type":466,"tag":25,"props":481,"children":483},{"className":482},[],[484],{"type":470,"value":485},"limits.conf",{"type":470,"value":242},{"data":488,"body":489},{},{"type":463,"children":490},[491],{"type":466,"tag":21,"props":492,"children":493},{},[494,496,501,503,509],{"type":470,"value":495},"Переполнение стека (",{"type":466,"tag":25,"props":497,"children":499},{"className":498},[],[500],{"type":470,"value":27},{"type":470,"value":502},") затрагивает только один процесс и вызывается исчерпанием лимита вызовов. OOM-killer (",{"type":466,"tag":25,"props":504,"children":506},{"className":505},[],[507],{"type":470,"value":508},"Out of memory",{"type":470,"value":510},") останавливает процесс при полном исчерпании RAM и swap.",{"data":512,"body":513},{},{"type":463,"children":514},[515],{"type":466,"tag":21,"props":516,"children":517},{},[518,520,526],{"type":470,"value":519},"Технически можно скомпилировать с флагом ",{"type":466,"tag":25,"props":521,"children":523},{"className":522},[],[524],{"type":470,"value":525},"-fno-stack-protector",{"type":470,"value":527},", но это крайне не рекомендуется. Отключение защиты делает программу уязвимой к эксплойтам переполнения буфера.",{"data":529,"body":530},{},{"type":463,"children":531},[532],{"type":466,"tag":21,"props":533,"children":534},{},[535,537,542],{"type":470,"value":536},"Выполните в терминале команду ",{"type":466,"tag":25,"props":538,"children":540},{"className":539},[],[541],{"type":470,"value":241},{"type":470,"value":543},", чтобы узнать текущий размер стека в килобайтах. Стандартное значение обычно равно 8192 (8 МБ).",{"data":545,"body":546},{},{"type":463,"children":547},[548],{"type":466,"tag":21,"props":549,"children":550},{},[551,553,559,560,566],{"type":470,"value":552},"Введите ",{"type":466,"tag":25,"props":554,"children":556},{"className":555},[],[557],{"type":470,"value":558},"ulimit -s 16384",{"type":470,"value":32},{"type":466,"tag":25,"props":561,"children":563},{"className":562},[],[564],{"type":470,"value":565},"ulimit -s unlimited",{"type":470,"value":567},". Это применится только к текущей сессии и процессам, запущенным из неё.",{"data":569,"body":570},{},{"type":463,"children":571},[572],{"type":466,"tag":21,"props":573,"children":574},{},[575,577,583,585,591,593,599],{"type":470,"value":576},"Откройте ",{"type":466,"tag":25,"props":578,"children":580},{"className":579},[],[581],{"type":470,"value":582},"/etc/security/limits.conf",{"type":470,"value":584}," через ",{"type":466,"tag":25,"props":586,"children":588},{"className":587},[],[589],{"type":470,"value":590},"sudo nano",{"type":470,"value":592},", добавьте строку ",{"type":466,"tag":25,"props":594,"children":596},{"className":595},[],[597],{"type":470,"value":598},"* soft stack 16384",{"type":470,"value":600}," и перезайдите в систему для применения изменений.",{"data":602,"body":603},{},{"type":463,"children":604},[605],{"type":466,"tag":21,"props":606,"children":607},{},[608,610,616,618,624,626,631],{"type":470,"value":609},"Запустите программу командой ",{"type":466,"tag":25,"props":611,"children":613},{"className":612},[],[614],{"type":470,"value":615},"gdb ./ваша_программа",{"type":470,"value":617},", затем введите ",{"type":466,"tag":25,"props":619,"children":621},{"className":620},[],[622],{"type":470,"value":623},"run",{"type":470,"value":625},". При падении используйте ",{"type":466,"tag":25,"props":627,"children":629},{"className":628},[],[630],{"type":470,"value":322},{"type":470,"value":632},", чтобы увидеть стек вызовов и найти проблемную функцию.",[]]