Sometimes it can be helpful to understand the internal state of threads
running in a Zammad process. This can be achieved by sending a SIGWINCH
signal to any Zammad service (railsserver, websocket or background worker)
process, which will cause the process to print the state of its threads to
STDOUT.
Find out process ID of Zammad webserver
$ ps
PID TTY TIME CMD
…
77926 ttys001 0:03.02 puma 6.5.0 (tcp://localhost:3000) [zammad]
…
Send the SIGWINCH signal to that process or any of its forked workers. This doesn't acutally "kill" the process.
kill -SIGWINCH 77926
Observe the log output in the process' STDOUT, e.g. via journalctl
PID: 77926 Thread: TID-jqk AR Pool Reaper
/path/to/gems/ruby-3.2.4/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb:49:in `sleep'
/path/to/gems/ruby-3.2.4/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/connection_pool/reaper.rb:49:in `block in spawn_thread'
PID: 77926 Thread: TID-jr4 listen-wait_thread
<internal:thread_sync>:18:in `pop'
/path/to/rubies/ruby-3.2.4/lib/ruby/3.2.0/forwardable.rb:240:in `pop'
/path/to/gems/ruby-3.2.4/gems/listen-3.9.0/lib/listen/event/processor.rb:89:in `_wait_until_events'
/path/to/gems/ruby-3.2.4/gems/listen-3.9.0/lib/listen/event/processor.rb:21:in `block in loop_for'
…