все
Моя программа на C ++ создает дамп памяти размером до 2 ГБ и быстро заполняет все доступное дисковое пространство. Что мне действительно нужно, так это только обратная трассировка. Мне было интересно, каков безопасный размер файла дампа ядра, если я хочу сохранить обратную трассировку. Также мне было интересно, есть ли другие умные решения.
Спасибо! Джеймс
Вы можете направить дамп ядра прямо в программу, которая сохраняет трассировку во временное место, извлекает трассировку, затем помещает ее в место, где пользователь может получить к ней доступ, а затем удаляет ядро. Видеть man 5 core
для примера того, как что-то делать с шаблоном coredump. По сути, вы можете установить значение управления ядром kernel.coredump_pattern
направьте ядро в определенную программу. Таким образом, у вас есть полный контроль над логикой того, когда сохранять coredump, а когда нет. Имейте в виду, что программа, которую вы запускаете, запускается от имени пользователя root! |/usr/local/bin/coredump_it.sh
был бы примером этого.
В качестве альтернативы, systemd
уже предоставляет функции для этого. Если вы установите шаблон coredump таким образом
kernel.core_pattern = |/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e
Затем вы можете использовать команду coredumpctl
для хранения и извлечения трассировки указанного дампа ядра. Например, ядро для PID 24164 ..
coredumpctl info 24164
$ coredumpctl info 24164
PID: 24164 (bintree)
UID: 1000 (matthew)
GID: 1000 (matthew)
Signal: 11 (SEGV)
Timestamp: Mon 2015-02-09 19:14:13 GMT (1 months 19 days ago)
Command Line: ./bintree
Executable: /home/matthew/Testbed/trees/binary/bintree
Control Group: /user.slice/user-1000.slice/session-1.scope
Unit: session-1.scope
Slice: user-1000.slice
Session: 1
Owner UID: 1000 (matthew)
Boot ID: 82a18962ecc34109965530967f12150b
Machine ID: 69d27b356a94476da859461d3a3bc6fd
Hostname: home.localdomain
Message: Process 24164 (bintree) of user 1000 dumped core.
Stack trace of thread 24164:
#0 0x0000000000400680 bintree_fetch (bintree)
#1 0x0000000000400a7e main (bintree)
#2 0x000000316fc1ffe0 __libc_start_main (libc.so.6)
#3 0x0000000000400589 _start (bintree)
Вы можете просто позвонить coredumpctl
напрямую, чтобы получить список сохраненных файлов coredump.