読者です 読者をやめる 読者になる 読者になる

〆(.. )カリカリッ!! systemd-coredumpctlでコアダンプしたプロセスのcoreファイルを取得

linux systemd

使っているLinuxディストリビューションはArch Linuxです。多分systemdを使っている環境ならsystemd-coredumpctlでcoreを取れると思いますが未確認です。。。

こんな感じで色々とやられています。

masami@saga:~/debug/usr$ sudo journalctl -b -r -p 2
-- Logs begin at Fri 2013-11-01 02:34:09 JST, end at Thu 2013-11-07 01:06:23 JST. --
Nov 07 00:54:04 saga systemd-coredump[6382]: Process 6337 (tmux) dumped core.
Nov 07 00:52:34 saga systemd-coredump[6001]: Process 5956 (tmux) dumped core.
Nov 07 00:51:48 saga systemd-coredump[5827]: Process 5785 (chromium) dumped core.
Nov 07 00:51:19 saga systemd-coredump[5581]: Process 5532 (tmux) dumped core.
Nov 07 00:47:01 saga systemd-coredump[2439]: Process 2404 (tmux) dumped core.
Nov 07 00:41:26 saga systemd-coredump[1058]: Process 1009 (tmux) dumped core.
Nov 07 00:31:53 saga systemd-coredump[24759]: Process 24686 (tmux) dumped core.
Nov 07 00:30:55 saga systemd-coredump[24361]: Process 24319 (chromium) dumped core.
Nov 07 00:30:10 saga systemd-coredump[24013]: Process 23872 (tmux) dumped core.
Nov 07 00:29:09 saga systemd-coredump[23694]: Process 814 (tmux) dumped core.
Nov 07 00:21:45 saga systemd-coredump[21336]: Process 21294 (chromium) dumped core.
Nov 06 23:58:57 saga systemd-coredump[14005]: Process 13962 (chromium) dumped core.
Nov 06 23:48:23 saga systemd-coredump[11143]: Process 11095 (chromium) dumped core.
Nov 06 23:44:50 saga systemd-coredump[10092]: Process 10048 (chromium) dumped core.

ログからはcoreを吐いたのが確認できますが、これがどこに置かれているかが疑問になりますね。
Arch Linuxフォーラムによると どうもsystemd環境ではcoreファイルは作成されずにjournalに保存しているのでそこから取り出す形という答えがありました。

ということで試してみます。
まずはcommandにlistを付けて一覧表示。

masami@saga:~/debug/usr$ sudo systemd-coredumpctl list
TIME                                         PID   UID   GID SIG EXE
              Fri 2013-11-01 07:19:56 JST   2643  1000  1000  11 /usr/lib/chromium/chromium
              Fri 2013-11-01 09:12:44 JST   1571  1000  1000  11 /usr/lib/chromium/chromium
              Fri 2013-11-01 12:56:19 JST  16973  1000  1000  11 /usr/lib/chromium/chromium
              Fri 2013-11-01 13:24:05 JST  26555  1000  1000  11 /usr/lib/chromium/chromium
 ~中略~
              Thu 2013-11-07 00:47:01 JST   2404  1000  1000   6 /usr/bin/tmux
              Thu 2013-11-07 00:51:19 JST   5532  1000  1000   6 /usr/bin/tmux
              Thu 2013-11-07 00:51:48 JST   5785  1000  1000  11 /usr/lib/chromium/chromium
              Thu 2013-11-07 00:52:34 JST   5956  1000  1000   6 /usr/bin/tmux
              Thu 2013-11-07 00:54:04 JST   6337  1000  1000   6 /usr/bin/tmux

例えばpid 6337のcoreファイルを取得するにはcommandにdumpです。出力ファイル名の指定は-oオプションで。

masami@saga:~/debug/usr$ sudo systemd-coredumpctl dump 6337 -o core.6337
TIME                                         PID   UID   GID SIG EXE
              Thu 2013-11-07 00:54:04 JST   6337  1000  1000   6 /usr/bin/tmux
More than one entry matches, ignoring rest.

もちろんgdbの-cオプションにこのコアファイルを指定できます。

masami@saga:~/debug/usr$ ls core.6337
core.6337
masami@saga:~/debug/usr$ file core.6337
core.6337: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from '/usr/bin/tmux'

masami@saga:~/debug/usr$ gdb -c ./core.6337
[New LWP 6337]

warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000
Core was generated by `/usr/bin/tmux'.
Program terminated with signal 6, Aborted.
#0  0x00007ffff71a03d9 in ?? ()
(gdb) bt
#0  0x00007ffff71a03d9 in ?? ()
#1  0x00007ffff71a17d8 in ?? ()
#2  0x0000000000000020 in ?? ()
#3  0x0000000000000000 in ?? ()