TL;DR
Rocky Linux 8(というかRHEL8互換)ではdatadirに生でcoredumpを吐き出さない
coredumpctl
を使うらしい
—core-file も ulimit -c unlimited
も設定してるのにcoredumpが見つからない…と思ったら変わっていたらしい。
$ less /usr/mysql/8.0.36/data/error.log
..
2024-03-08T07:36:23Z UTC - mysqld got signal 11 ;
<secret>
/usr/mysql/8.0.36/bin/mysqld(do_command(THD*)+0x15b) [0xde00bb]
/usr/mysql/8.0.36/bin/mysqld() [0xf391b8]
/usr/mysql/8.0.36/bin/mysqld() [0x2576814]
/lib64/libpthread.so.0(+0x81da) [0x7fa868e941da]
/lib64/libc.so.6(clone+0x43) [0x7fa867236e73]
Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (7fa80438de80): SHOW CREATE TABLE sys.metrics
Connection ID (thread ID): 14
Status: NOT_KILLED
The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
information that should help you find out what is causing the crash.
Writing a core file
Writing a core file
と言ってるくせに、datadirにない。
$ ll /usr/mysql/8.0.36/data/core*
ls: cannot access '/usr/mysql/8.0.36/data/core*': No such file or directory
journalctl
を見たらなんかスタックトレース ( gdb
の thread apply all bt
と同じように全スレッドぶん) が載ってる…こんなの前にはなかったはず…そして俺はスタックトレースじゃなくてcoreファイルが欲しいんだ…!
$ sudo journalctl --since=today | less
..
Mar 08 07:36:45 yoku0825-sandbox systemd-coredump[2500410]: Process 2453404 (mysqld) of user 1001 dumped core.
Stack trace of thread 2453453:
#0 0x00007fa868e9ba85 pthread_kill (libpthread.so.0)
#1 0x0000000000f4913c handle_fatal_signal (mysqld)
#2 0x00007fa868e9ed40 __restore_rt (libpthread.so.0)
..
と思ってググったらあっという間に冒頭のブログに出会った。
systemd-coredump環境で暮らす - 赤帽エンジニアブログ
$ sudo coredumpctl list
TIME PID UID GID SIG COREFILE EXE
Thu 2024-03-07 02:41:14 GMT 2433147 1001 1001 11 present /usr/mysql/8.0.36/bin/mysqld
Thu 2024-03-07 04:00:05 GMT 2441380 1001 1001 5 present /usr/mysql/8.0.36/bin/mysqld
Fri 2024-03-08 07:36:45 GMT 2453404 1001 1001 11 present /usr/mysql/8.0.36/bin/mysqld
coredumpctl dump ..
でスタックトレースが出て「違う、俺はコアファイルが欲しいんだ」って気になったけど特に気にしなくて良くてちゃんとoutputに出力されてた。
$ sudo coredumpctl dump -1 --output ./core.2433147
PID: 2453404 (mysqld)
UID: 1001 (yoku0825)
GID: 1001 (yoku0825)
Signal: 11 (SEGV)
Timestamp: Fri 2024-03-08 07:36:23 GMT (50min ago)
Command Line: /usr/mysql/8.0.36/bin/mysqld --basedir=/usr/mysql/8.0.36 --datadir=/usr/mysql/8.0.36/data --plugin-dir=/usr/mysql/8.0.36/lib/plugin --server-id=1080 --default-authentication-plugin=mysql_native_password --mysqlx=off --early-plugin-load=keyring_file.so --default-time-zone=+00:00 --loose-rpl-semi-sync-source-enabled=ON --loose-innodb-ddl-threads=1 --log-error=error.log --pid-file=/usr/mysql/8.0.36/data/mysql.pid --socket=/usr/mysql/8.0.36/data/mysql.sock --port=64080
Executable: /usr/mysql/8.0.36/bin/mysqld
Control Group: /
Slice: -.slice
Boot ID: 64f2b36cc0ba43cea4f50ea42cae833f
Machine ID: f0891c4bddbf4944abc3c0e87e12fe9c
Hostname: yoku0825-sandbox
Storage: /var/lib/systemd/coredump/core.mysqld.1001.64f2b36cc0ba43cea4f50ea42cae833f.2453404.1709883383000000.lz4
Message: Process 2453404 (mysqld) of user 1001 dumped core.
..
dumpで吐き出させたあとはいつも通りgdbで見られる。 coredumpctl debug -1
でも良さそう(sudo噛ませると .gdbinit 読んでくれなくてちょっと見づらい)
$ gdb ../bin/mysqld core.2433147
or
$ sudo coredumpctl debug -1
PID: 2453404 (mysqld)
UID: 1001 (yoku0825)
GID: 1001 (yoku0825)
Signal: 11 (SEGV)
Timestamp: Fri 2024-03-08 07:36:23 GMT (53min ago)
Command Line: /usr/mysql/8.0.36/bin/mysqld --basedir=/usr/mysql/8.0.36 --datadir=/usr/mysql/8.0.36/data --plugin-dir=/usr/mysql/8.0.36/lib/plugin --server-id=1080 --default-authentication-plugin=mysql_native_password --mysqlx=off --early-plugin-load=keyring_file.so --default-time-zone=+00:00 --loose-rpl-semi-sync-source-enabled=ON --loose-innodb-ddl-threads=1 --log-error=error.log --pid-file=/usr/mysql/8.0.36/data/mysql.pid --socket=/usr/mysql/8.0.36/data/mysql.sock --port=64080
Executable: /usr/mysql/8.0.36/bin/mysqld
Control Group: /
Slice: -.slice
Boot ID: 64f2b36cc0ba43cea4f50ea42cae833f
Machine ID: f0891c4bddbf4944abc3c0e87e12fe9c
Hostname: yoku0825-sandbox
Storage: /var/lib/systemd/coredump/core.mysqld.1001.64f2b36cc0ba43cea4f50ea42cae833f.2453404.1709883383000000.lz4
Message: Process 2453404 (mysqld) of user 1001 dumped core.
..
### これもしばらくスタックトレース吐いたあと止まるけどそのうちgdbが始まる
coredumpctl infoだと圧縮されたコアファイルのパスも吐いてくれるので、lz4catとかでもなんとかなった
$ sudo coredumpctl info -1
PID: 2453404 (mysqld)
UID: 1001 (yoku0825)
GID: 1001 (yoku0825)
Signal: 11 (SEGV)
Timestamp: Fri 2024-03-08 07:36:23 GMT (54min ago)
Command Line: /usr/mysql/8.0.36/bin/mysqld --basedir=/usr/mysql/8.0.36 --datadir=/usr/mysql/8.0.36/data --plugin-dir=/usr/mysql/8.0.36/lib/plugin --server-id=1080 --default-authentication-plugin=mysql_na>
Executable: /usr/mysql/8.0.36/bin/mysqld
Control Group: /
Slice: -.slice
Boot ID: 64f2b36cc0ba43cea4f50ea42cae833f
Machine ID: f0891c4bddbf4944abc3c0e87e12fe9c
Hostname: yoku0825-sandbox
Storage: /var/lib/systemd/coredump/core.mysqld.1001.64f2b36cc0ba43cea4f50ea42cae833f.2453404.1709883383000000.lz4 <----- ここ
Message: Process 2453404 (mysqld) of user 1001 dumped core.
..
昔 abrtd
にコアファイルを消し去られる事案があってそれかなあと思っていたら RHEL8では非推奨 になっていたんですね。
OSが変わったことを感じる…。
0 件のコメント :
コメントを投稿