Advanced .NET debugging techniques from real world investigations
summary
Criteo runs 150 billion requests per day across ~4,000 servers and investigates two real incidents: a slow steady rise in lock contention traced to 14,000 TimerQueueTimer instances (normal ~2,000) caused by MetaMetric objects that never dispose their timers; fix is to implement IDisposable and an external finalizer as a mitigation. A second case shows ~1,000,000 exceptions/min (≈20k/s) from repeated ThreadAbortException in an infinite retry loop exposed only on 64‑bit JIT; remedies include catching/rethrowing ThreadAbortException and reporting the JIT bug. Tools: metrics, JetBrains dotTrace, WinDbg+SOS, and automation with ClrMD.
AI-written summary · about
chapters (15)
- 0:00Intro
- 5:20First example
- 7:10Checking the source code
- 17:27Checking the instance method
- 22:35Checking the meta metric
- 22:55Understanding the meta metric
- 24:17Verifying the meta metric
- 31:05The big picture
- 33:50Whats the difference
- 34:22Conclusion
- 36:35The mindset
- 37:28Third chance exceptions
- 38:53Lock the catch block
- 44:10Curse loop
- 47:07Verify
related talks
53mDebugging .NET Apps
01h 09mSherlock Homepage - A detective story about running large web services
55mPower your .NET application with the new generation of diagnostics
43mSelf-Aware Applications: Automatic Production Monitoring
55mPreemptive monitoring applications in production
01h 02mThe performance loop—A practical guide to profiling and benchmarking
38mEffective App Monitoring in Production
47mSolving .NET performance issues
