Core dump debugging
Prosody and Lua itself rarely crashes so hard you need this page, but sometimes there are issues with dependencies like luaevent.
Enabling core dumps on crashes
Add this line to /etc/sysctl.conf
:
kernel.core_pattern = /tmp/%t.%p.core
To enable it without rebooting, run:
sysctl -w 'kernel.core_pattern = /tmp/%t.%p.core'
If Prosody has been given the capability to bind low ports then this counts as suid, which in turn disables core dumps. This can be bypassed with:
fs.suid_dumpable = 1
In your prosody.cfg.lua
add:
require"util.pposix".setrlimit("CORE", "unlimited", "unlimited")
Getting a core dump from a running Prosody
Without killing it.
prosodyctl status
# should print eg Prosody is running with PID 1234
gcore -o prosody 1234
This should produce a file prosody.1234
.
Getting a backtrace
Open the core dump using
gdb -c prosody.1234 /usr/bin/lua5.1
, then you can get a
backtrace using bt
or more vebosely with
bt full
.