Server reader thread crashes on exit with Puma in cluster mode
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 45/100
Rechercherichtung
Reproduce the shutdown exception with the linked clustered Puma example, then inspect debug/server.rb around lines 44 and 511 and the shown Socket unix_server_loop stack. Done means interrupting the server no longer reports reader or session thread exceptions while the debugger Unix socket is cleaned up.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Your environment
ruby -v: ruby 3.3.9 (2025-07-24 revision f5c772fc7c) [x86_64-linux]rdbg -v: rdbg 1.11.0
Describe the bug
When running a Rails server (puma) with RUBY_DEBUG_OPEN=true, it seems to work normally until you stop the server and we have a crash from the server reader thread:
$ RUBY_DEBUG_OPEN=true bin/rails server
DEBUGGER: Debugger can attach via UNIX domain socket (/run/user/1000/rdbg-110109)
=> Booting Puma
=> Rails 8.0.2.1 application starting in development
=> Run `bin/rails server --help` for more startup options
[110109] Puma starting in cluster mode...
[110109] * Puma version: 6.6.1 ("Return to Forever")
[110109] * Ruby version: ruby 3.3.9 (2025-07-24 revision f5c772fc7c) [x86_64-linux]
[110109] * Min threads: 5
[110109] * Max threads: 5
[110109] * Environment: development
[110109] * Master PID: 110109
[110109] * Workers: 1
[110109] * Restarts: (✔) hot (✖) phased (✖) refork
[110109] * Preloading application
[110109] * Listening on http://127.0.0.1:3000
[110109] * Listening on http://[::1]:3000
[110109] Use Ctrl-C to stop
[110109] ! WARNING: Detected running cluster mode with 1 worker.
[110109] ! Running Puma in cluster mode with a single worker is often a misconfiguration.
[110109] ! Consider running Puma in single-mode (workers = 0) in order to reduce memory overhead.
[110109] ! Set the `silence_single_worker_warning` option to silence this warning message.
DEBUGGER[bin/rails#110151]: Debugger can attach via UNIX domain socket (/run/user/1000/rdbg-110109)
[110109] - Worker 0 (PID: 110151) booted in 0.0s, phase: 0
^C[110109] - Gracefully shutting down workers...
[110109] === puma shutdown: 2025-12-08 08:58:00 -0300 ===
[110109] - Goodbye!
Exiting
#<Thread:0x00007fcebcb66df8@DEBUGGER__::Server::reader /home/we/p/we/vendor/bundle/ruby/3.3.0/gems/debug-1.11.0/lib/debug/server.rb:44 aborting> terminated with exception (report_on_exception is true):
/home/we/.rbenv/versions/3.3.9/lib/ruby/3.3.0/socket.rb:1128:in `unlink': No such file or directory @ apply2files - /run/user/1000/rdbg-110109 (Errno::ENOENT)
from /home/we/.rbenv/versions/3.3.9/lib/ruby/3.3.0/socket.rb:1128:in `ensure in unix_server_socket'
from /home/we/.rbenv/versions/3.3.9/lib/ruby/3.3.0/socket.rb:1128:in `unix_server_socket'
from /home/we/.rbenv/versions/3.3.9/lib/ruby/3.3.0/socket.rb:1169:in `unix_server_loop'
from /home/we/p/we/vendor/bundle/ruby/3.3.0/gems/debug-1.11.0/lib/debug/server.rb:511:in `accept'
from /home/we/p/we/vendor/bundle/ruby/3.3.0/gems/debug-1.11.0/lib/debug/server.rb:49:in `block in activate'
#<Thread:0x00007fcebcb66a10@DEBUGGER__::SESSION@server /home/felipe/p/recipal/vendor/bundle/ruby/3.3.0/gems/debug-1.11.0/lib/debug/session.rb:179 aborting> terminated with exception (report_on_exception is true):
/home/felipe/.rbenv/versions/3.3.9/lib/ruby/3.3.0/socket.rb:1128:in `unlink': No such file or directory @ apply2files - /run/user/1000/rdbg-110109 (Errno::ENOENT)
from /home/we/.rbenv/versions/3.3.9/lib/ruby/3.3.0/socket.rb:1128:in `ensure in unix_server_socket'
from /home/we/.rbenv/versions/3.3.9/lib/ruby/3.3.0/socket.rb:1128:in `unix_server_socket'
from /home/we/.rbenv/versions/3.3.9/lib/ruby/3.3.0/socket.rb:1169:in `unix_server_loop'
from /home/we/p/we/vendor/bundle/ruby/3.3.0/gems/debug-1.11.0/lib/debug/server.rb:511:in `accept'
from /home/we/p/we/vendor/bundle/ruby/3.3.0/gems/debug-1.11.0/lib/debug/server.rb:49:in `block in activate'
To Reproduce
I've manged to reproduce this running puma in clustered mode here: https://github.com/Draiken/debug-issue-unlink
Basically, start the server, interrupt it, we get the exception.
Expected behavior
No exceptions should occur.
Additional context
I imagine it's a race condition when attempting to remove the debug unix socket.
- Vorherrschende Sprache
- Ruby
- Sterne
- 1.3k
- Forks
- 146
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus ruby/debug
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 68/100
-
Support exceptionOptions in setExceptionBreakpoints to catch arbitrary exception classes via DAP Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 55/100
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 52/100
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 45/100
Ähnliche Issues
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
-
バグ
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 92/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
voxpupuli/puppet-epel#186 · 1 Kommentar ·
-
external_created_at is no longer used for the message timestamp since the new message UI (v4.4.0) OffenBug Frontend
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100