79
Hunting Performance Problems in Node.js Daniel Khan | @dkhan

Don't let just Node.js take the blame

Embed Size (px)

Citation preview

HuntingPerformanceProblemsinNode.jsDanielKhan|@dkhan

@dkhan

@dkhan

@dkhan

@dkhan

@dkhan

Node.js iswhattheCompanyOutlaws

usetofinally introducechange

@dkhan

@dkhan

@dkhan

Node.js iswhattheCompanyHipstersthrewin

justtobreakeverything@dkhan

@dkhan

ProactiveDefense

@dkhan

Node.jsisaC++programcontrolledbyV8JavaScript

@dkhan

@dkhan

@dkhan

@dkhan

HuntingMemoryProblems

@dkhan

@dkhan

process.memoryUsage(){ rss: 4935680, heapTotal: 1826816, heapUsed: 650472 }

@dkhan

@dkhan

@dkhan

@dkhan

@dkhan

@dkhan

@dkhan

@dkhan

HowtobuildaMemoryLeak

@dkhan

theThing

someMethod()

longStr

unused()

originalThing

ClosureContext

Reference

Root

@dkhan

@dkhan

http://bit.ly/1PvijIy

var snap=profiler.takeSnapshot();snap.serialize();

v8-profiler

@dkhan

Delta

@dkhan

HuntingCPUProblems

@dkhan

calculateFibonacci();

@dkhan

http://bit.ly/1jQMbBR

profiler.startProfiling(id);profiler.stopProfiling(id);

v8-profiler

@dkhan

@dkhan

@dkhan

NODE_ENV=productionNODE_ENV=development

Blog:http://bit.ly/1flz0Xm

@dkhan

@dkhan

get(‘/routeA’,function(){})

get(‘/routeB’,function(){})

get(‘/routeC’,function(){})

get(‘/routeD’,function(){})

get(‘/routeE’,function(){})

get(‘/routeA’,function(){})

get(‘/routeX’,function(){})

get(‘/^(route|router)\/(.+)’,function(){})

HTTPGET/routeX

get(‘/routeA’,function(){})

get(‘/routeX’,function(){})

O(n)

@dkhan

Findingtheroute

@dkhan

@dkhan

@dkhan

@dkhan

@dkhan

@dkhan

@dkhan

@dkhan

@dkhan

1980 20001995 2005 2010 2015

Stakeholders@dkhan

1000RPS

Node.js

10RPS

AncientLegacyBackend

@dkhan

@dkhan

@dkhan

“Nomanisanisland”or…Weneedaholisticview.

MeetApplicationPerformanceMonitoring

@dkhan

@dkhan

@dkhan

@dkhan

@dkhan

@dkhan

Don’tbetheonetoblame!

@dkhan

#1MonitorMemoryConsumption

@dkhan

#2MonitorCPUUsage

@dkhan

#3ProtectyourBoundaries

@dkhan

[email protected]

Node.jsTechnologyLead