Что хорошего в настройке RLIMIT_CORE, если мне нужна только обратная трассировка?

Все

Моя программа на C++ генерирует дамп ядра размером до 2 ГБ и быстро заполняет все используемое дисковое пространство. Что мне действительно нужно, так это только обратный ход. Мне было интересно, каков безопасный размер файла дампа ядра, если я хочу сохранить обратную трассировку. Кроме того, мне было интересно, есть ли другие умные решения.

Спасибо! Джеймс

1 ответ

Вы можете направить coredump напрямую в программу, которая сохраняет трассировку во временную папку, извлекает обратную трассировку, затем помещает ее туда, где пользователь может получить к ней доступ, затем удаляет ядро. Увидеть man 5 core для примера того, как сделать что-то с шаблоном coredump. По сути, вы можете установить значение контроля ядра kernel.coredump_pattern направить coredump в конкретную программу. Таким образом, вы полностью контролируете логику того, когда сохранять 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 хранить и извлекать обратную трассировку упомянутого coredump. Например, где coredump для 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 непосредственно, чтобы получить список сохраненных coredumps.

Другие вопросы по тегам