2014-11-12 1 views
1

меня установлен обработчик аварии на:Распаковка StackTrace от крупных аварий

/proc/sys/kernel/core_pattern 

Какие трубы входящий CoreDump в файл, а затем извлекает StackTrace с помощью GDB.

Проблема в том, что иногда эти выпуклости могут быть очень большими (часто более 30 ГБ). В этих случаях пользователи ждут и ждут, пока coredump будет записан на диск до того, как приложение зависает.

Какие-либо предложения относительно того, как обращаться с этими очень большими сердечниками неблокируемым способом? Я не забочусь о корундаме как таковом, ценная стоимость стопки.

У меня нет доступа к источнику, поэтому ответы, такие как https://serverfault.com/questions/627747/non-blocking-core-dump-on-linux, не так практичны.

Спасибо!

ответ

2

У меня нет доступа к источнику, поэтому ответы, такие как https://serverfault.com/questions/627747/non-blocking-core-dump-on-linux, не так практичны.

Если приложение динамически связано, вы можете вставить LD_PRELOAD google coredumper, поэтому ответ несколько практичен.

Другой возможной альтернативой является http://github.com/tbricks/tbstack.

Конечно, сброс 30 ГБ ОЗУ, чтобы просто выбросить большую часть его, является расточительным.

+0

Спасибо! tbstack работал как шарм! Любые предложения о том, как развернуть имена функций в стеке? Кстати, я опасаюсь LD_PRELOAD, так как рабочая среда, в которой я работаю, поддерживает очень большое количество сторонних инструментов, каждый из которых должен быть протестирован с этим набором переменных. Еще раз спасибо! – matthewatabet

+0

Хмммм ... на самом деле это может не сработать для моего дела. Запуск утилиты на здоровый процесс работает, как ожидалось. Но, запуская его в недавно разбитый процесс как часть hook_pattern, получается, что 0k копируется из процесса. Это ожидалось? – matthewatabet