Workshop: Production Diagnostics for Node Applications
Node.js, the popular cross-platform JavaScript server framework, has grown in popularity and scale to the point where very challenging, non-trivial, production-only issues pop up in complex deployment environments. Although Node.js is equipped with the built-in V8 profiler, it is limited in scope to CPU time, which doesn’t account for the majority of Node.js performance issues. Also, profiling in production environments requires non-invasive tools with a low overhead, which do not require an application restart for the sake of profiling. In this workshop, we will learn, understand, and experiment with Node.js profiling tools designed for production use.
We will experiment with the built-in V8 profiler, and learn how to analyze its log output to zoom-in on CPU hot-spots in the V8 runtime, your JavaScript code, or external modules. We will also explore the Linux perf multi-tool, which can perform general-purpose CPU profiling, and how to get the Node.js runtime to generate symbolic information required to resolve stack traces emitted by perf. We will visualize stack traces using flame graphs, and understand where the CPU bottlenecks lie. We will also look at core dump analysis for crashes and memory leaks, and identify heap objects using the llnode plugin for lldb. In the second half of this workshop, we will talk about more complicated scenarios: diagnosing intermittent errors when connecting to a database or running queries, monitoring system I/O load, understanding the reasons for excessive V8 garbage collection, figuring out why your event loop thread is blocked, and more.
Outline:
- Node.js observability tools
- CPU profiling with V8
- Linux perf and CPU sampling
- Visualizing CPU profiles with flame graphs
- Introduction to BPF
- BPF scenarios and the BCC toolkit
- USDT probes
- Blocked-time analysis
Tracks
Monday, 4 April
-
Architectures You've Always Wondered About
Hard-earned lessons from the names you know on scalability, reliability, security & performance.
-
Innovations in ML Systems
Discover how to operationalize machine learning applications that are scalable, secure, interpretable.
-
Developer Enablement - The Secret Weapon
How to supercharge developer productivity and happiness.
-
Performance & Mechanical Sympathy
Wrangling computer architectures to achieve your performance goals.
-
Current Trends in Frontends
Emerging frameworks and tools for web & mobile frontends.
Tuesday, 5 April
-
Building and Evolving APIs
How would you design and implement your APIs if you were starting today?
-
Staff-Plus Engineer Path
What are the skills you need to develop if you want to stay on the technical track to technical lead, staff, or principal? What will it take to thrive in this type of role?
-
Debug, Analyze & Optimise... in Production!
Learn how to make the most out of your observability.
-
Resilient Architectures
Building systems that can handle failures.
-
Modern Java
New, shiny, and proven – making your Java life better.
Wednesday, 6 April
-
WebAssembly & Modern Systems Programming Languages
Writing efficient code with modern systems languages like Rust and WebAssembly
-
Effective Microservices: What It Takes to Get the Most Out of This Approach
Patterns for building, organizing, observing & operating microservices in the real world.
-
Modern Data Pipelines & DataMesh
Learn about emerging solutions for creating modern data pipelines for common data challenges.
-
Optimising for Speed & Flow
Discover processes, practices & organizational structures that can help us build & release faster.
-
Enterprise Blockchain
Real-world examples and case studies on blockchain, DeFi, Web3, and more.