troubleshooting node.js
TRANSCRIPT
TROUBLESHOOTINGNODE.JS
what to do when things go wrong
Igor Soarez [email protected] @igorsoarez
Hassy Veldstra [email protected] @hveldstra
WDCNZ, July 2015
TEST TEST TEST
• Functional tests first
• Good coverage for unit tests
• Randomised testing & fuzz testing
MONITORING & ALERTING• Resource monitoring
• CPU
• Memory
• I/O
• Application monitoring
• Errors
• Real-user monitoring
• Latency
• Availability
IF YOU DO THIS• Analytics
• Custom header
• Cookie
• Let Marketing know
• Start outside of peak times
IF YOU DO THIS• Analytics
• Custom header
• Cookie
• Let Marketing know
• Start outside of peak times
• Start slow & ramp up
ATTACK THE PROBLEM
1. Isolated test case *
2. Measure
3. Change / Tweak / Improve
4. Goto 2
* If possible
TYPES OF ISSUES
• CPU-bound code• Memory leaks• GC pressure• I/O performance• Event loop lag (Node.js)
KNOW THE TOOLS AVAILABLE• Platform-specific (Node.js)
• V8 profiler• find hot-path functions that cannot be optimized• trace GC activity
KNOW THE TOOLS AVAILABLE• Platform-specific (Node.js)
• V8 profiler• find hot-path functions that cannot be optimized• trace GC activity
• heapdump• find memory leaks
KNOW THE TOOLS AVAILABLE• Platform-specific (Node.js)
• V8 profiler• find hot-path functions that cannot be optimized• trace GC activity
• heapdump• find memory leaks
• flamegraphs• see what's hot on the CPU
KNOW THE TOOLS AVAILABLE• Platform-specific (Node.js)
• V8 profiler• find hot-path functions that cannot be optimized• trace GC activity
• heapdump• find memory leaks
• flamegraphs• see what's hot on the CPU
• node-toobusy-js• track the event loop lag
Collected stack frames
h()
c() h() c() c() z() c()
b() f() b() b() f() b() y() b() b()
a() a() a() m() a() m() x() m() a()
main() main() main() main() main() main() main() main() main()