getsentry / getsentry/sentry-ruby

Segmentation fault in TracePoint handler on Ruby 3.4.6 +YJIT (Sidekiq)

Ouverte
#2,913 2 commentaires 0 réactions 1 personne assignée Réclamée par @sl0thentr0py Voir sur GitHub
Bug Errors Ruby
Langage dominant
Ruby
Étoiles
987
Forks
541
Merge moyen
17 h 40 min
PR mergées (30 j)
19

Description

### Issue Description

We're experiencing recurring segmentation faults in production on our Sidekiq background worker. The crash occurs inside Ruby's `` implementation, called from sentry-ruby's `include_local_variables` TracePoint handler.

## Crash Dump

```
:382: [BUG] Segmentation fault at 0x00000001c63e5400
ruby 3.4.6 (2025-09-16 revision dbd83256b1) +YJIT +PRISM [x86_64-linux]

-- Control frame information -----------------------------------------------
c:0109 p:0003 s:0725 e:000724 METHOD :382
c:0108 p:0021 s:0721 e:000720 BLOCK sentry-ruby-5.27.0/lib/sentry-ruby.rb:74 [FINISH]
c:0107 p:0197 s:0715 e:000714 BLOCK /usr/local/lib/ruby/3.4.0/resolv.rb:570
c:0106 p:0012 s:0703 e:000702 BLOCK /usr/local/lib/ruby/3.4.0/resolv.rb:1168 [FINISH]
c:0105 p:0027 s:0698 e:000697 METHOD :228
c:0104 p:0007 s:0692 e:000691 BLOCK /usr/local/lib/ruby/3.4.0/resolv.rb:1166
c:0103 p:0027 s:0688 e:000687 METHOD :228
c:0102 p:0006 s:0682 e:000681 BLOCK /usr/local/lib/ruby/3.4.0/resolv.rb:1165
c:0101 p:0027 s:0678 e:000677 METHOD :228
c:0100 p:0028 s:0672 e:000671 METHOD /usr/local/lib/ruby/3.4.0/resolv.rb:1163
c:0099 p:0030 s:0664 e:000663 METHOD /usr/local/lib/ruby/3.4.0/resolv.rb:540
c:0098 p:0008 s:0654 e:000653 METHOD /usr/local/lib/ruby/3.4.0/resolv.rb:523
c:0097 p:0022 s:0647 e:000646 METHOD /usr/local/lib/ruby/3.4.0/resolv.rb:414
SEGV received in SEGV handler
./entrypoint_worker.sh: line 29: 110 Aborted (core dumped) bundle exec sidekiq
```

## What We Know

- The crash happens inside `:382`, called from `sentry-ruby.rb:74` — the TracePoint handler registered by `include_local_variables = true`
- `resolv.rb` (Ruby's DNS resolver) is in the call stack — it raises internal exceptions as part of normal flow control, which triggers the global TracePoint on `:raise`
- A double SEGV occurred (`SEGV received in SEGV handler`), so the C-level backtrace was not printed
- Ruby GC heap metrics and memory usage showed no anomalies before the crash
- The Sidekiq process was running concurrent workloads

### Reproduction Steps

Run concurrent jobs in the corresponding versions that might eventually raise exceptions

## Environment

- **sentry-ruby**: 5.27.0
- **Ruby**: 3.4.6 (2025-09-16 revision dbd83256b1) +YJIT +PRISM [x86_64-linux]
- **Sidekiq**: background worker with ~25 concurrent threads
- **Platform**: Linux

## Sentry Configuration

```ruby
Sentry.init do |config|
config.include_local_variables = true
config.traces_sample_rate = 1.0
config.profiles_sample_rate = 1.0
end
```

### Expected Behavior

Not to crash sidekiq server

### Actual Behavior

Crashing server

### Ruby Version

3.4.6 (2025-09-16 revision dbd83256b1)

### SDK Version

5.27.0

### Integration and Its Version

Sidekiq

### Sentry Config

```ruby
Sentry.init do |config|
config.include_local_variables = true
config.traces_sample_rate = 1.0
config.profiles_sample_rate = 1.0
end
```

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.