feat(crash): поднимать RLIMIT_CORE и логировать core_pattern при старте#3451
Merged
Conversation
0b910b0 to
1111f6b
Compare
При старте мада (signal_setup) поднимаем мягкий лимит RLIMIT_CORE до жёсткого (обычно unlimited) и логируем итоговый лимит и /proc/sys/kernel/ core_pattern. Зачем: если процесс стартует с маленьким мягким ulimit -c (на проде был 0), ОС пишет урезанный/нулевой core, и в gdb он читается как каша (стек "??") или дампа нет вовсе. Подъём лимита гарантирует полный читаемый core. Лог лимита и core_pattern сразу показывает, пишутся ли коры и куда. Аналог `ulimit -c unlimited` в скрипте запуска, но самодостаточно (не зависит от окружения запуска) и с логированием. Обработчик сигналов и backtrace не трогаются. <sys/resource.h> подключается только для не-Windows сборок. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1111f6b to
26b0be5
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Зачем
Краши на проде дают core-дамп, но в gdb стек — сплошные
??(каша). Частая причина — core урезан по размеру: процесс стартует с маленьким мягкимulimit -c, ОС пишет неполный core, и gdb не может раскрутить стек.Что
В
signal_setup()(вызывается при старте мада) добавленоenable_coredumps_and_log():RLIMIT_COREдо жёсткого (обычно unlimited) → ОС пишет полный core;Core dumps: RLIMIT_CORE was … set cur=… max=…) и/proc/sys/kernel/core_pattern(Core pattern: …).Так сразу видно при старте: пишутся ли коры, какой лимит, и куда они идут (файл рядом или pipe в обработчик типа systemd-coredump).
Обработчик сигналов (
crash_handle) иbacktraceНЕ трогаются.Как смотреть на проде
После сборки в SYSLOG при старте появятся две строки. Если
was 0или маленький — это и была причина каши; теперь core будет полным. ЕслиCore patternначинается с|— коры уходят в обработчик (systemd-coredump →coredumpctl), а не в файл рядом с бинарём.Проверка
ninja -C build— собирается чисто, без предупреждений.🤖 Generated with Claude Code