, 2 min read
Location of core files in Arch Linux
In the old UNIX days the core
file was written where the offending program was started.
The only prerequisite was that there was no limit imposed.
Limits can be checked by
$ ulimit -a
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) unlimited
-m: resident set size (kbytes) unlimited
-u: processes 254204
-n: file descriptors 1024
-l: locked-in-memory size (kbytes) 8192
-v: address space (kbytes) unlimited
-x: file locks unlimited
-i: pending signals 254204
-q: bytes in POSIX msg queues 819200
-e: max nice 0
-r: max rt priority 0
-N 15: rt cpu time (microseconds) unlimited
The line for the "core file size" must be greater than zero.
In Arch Linux that alone doesn't help. core
files are written to this directory:
$ coredumpctl info
PID: 16354 (h2o)
UID: 33 (http)
GID: 33 (http)
Signal: 11 (SEGV)
Timestamp: Wed 2024-04-10 20:02:12 CEST (2h 3min ago)
Command Line: h2o
Executable: /usr/bin/h2o
Control Group: /user.slice/user-1000.slice/user@1000.service/tmux-spawn-3fc3de1b-6e2d-43bf-ad3d-bf55b4ce3a1a.scope
Unit: user@1000.service
User Unit: tmux-spawn-3fc3de1b-6e2d-43bf-ad3d-bf55b4ce3a1a.scope
Slice: user-1000.slice
Owner UID: 1000 (klm)
Boot ID: 8b9d5dcffc3a4669b0c7fa244db334be
Machine ID: 814e9c58b1e34999a682767020267eb0
Hostname: chieftec
Storage: /var/lib/systemd/coredump/core.h2o.33.8b9d5dcffc3a4669b0c7fa244db334be.16354.1712772132000000.zst (inaccessible)
Message: Process 16354 (h2o) of user 33 dumped core.
Stack trace of thread 16363:
#0 0x0000777802fe7bb3 n/a (libcrypto.so.53 + 0xd0bb3)
#1 0x00007778030efd5b SSL_CTX_flush_sessions (libssl.so.56 + 0x24d5b)
#2 0x00005d994cc02023 cache_cleanup_thread (h2o + 0x12a023)
#3 0x0000777802c7755a n/a (libc.so.6 + 0x8b55a)
#4 0x0000777802cf4a3c n/a (libc.so.6 + 0x108a3c)
The command coredumpctl list
enlists the core
's so far:
$ coredumpctl list
TIME PID UID GID SIG COREFILE EXE SIZE
Sat 2024-04-06 17:55:20 CEST 24746 33 33 SIGSEGV inaccessible /usr/bin/h2o -
Sat 2024-04-06 18:49:20 CEST 26982 33 33 SIGSEGV inaccessible /usr/bin/h2o -
Sat 2024-04-06 18:50:04 CEST 27178 33 33 SIGSEGV inaccessible /usr/bin/h2o -
You can start debugging with coredumpctl debug
. That will call gdb
.
The location and name of the core
file can be changed by tampering with
$ cat /proc/sys/kernel/core_pattern
|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h
More information is here: Core dump file is not generated, coredumpctl, systemd-coredump.