SOCKET UTILIZATION IN NODE.JSAkhilesh Gupta
@agupta03
Inefficient use of TCP sockets: Is HTTP keep-alive working?
Node’s HTTP module supports keep-alive
But there is a catch!
TCP Connection kept alive only if PENDING requests in agent queue
If requests go out one-by-one Connection closed each time
High QPS/Low Latency
High time-wait sockets
Eventual node CRASH
Houston, we’ve had a problem here!
NPM Libraries to the rescue!
ceejbot/keep-alive-agent
mikeal/request : forever module
TBEDP/agentkeepalive
TUNING UP YOUR F-35!
Monitor time_wait sockets !
“If you can’t measure it, you can’t fix it”
TUNING UP YOUR F-35!
maxSockets !
Concurrent sockets agent can have open/host
TUNING UP YOUR F-35!
idleTimeout !
Time for which connection is unused before it is discarded
THE ENGINEERING HAPPINESS GRAPH
Normal agent:
Transactions: 60000 hits!Availability: 100.00 %!Elapsed time: 46.53 secs!Data transferred: 14.88 MB!Response time: 0.05 secs!Transaction rate: 1289.49 trans/sec!Throughput: 0.32 MB/sec!Concurrency: 59.81!Successful transactions:60000!Failed transactions: 0!Longest transaction: 0.45!Shortest transaction: 0.00
Keep alive agent (30 seconds):
Transactions: 60000 hits!Availability: 100.00 %!Elapsed time: 29.70 secs!Data transferred: 14.88 MB!Response time: 0.03 secs!Transaction rate: 2020.20 trans/sec!Throughput: 0.50 MB/sec!Concurrency: 59.84!Successful transactions:60000!Failed transactions: 0!Longest transaction: 0.15!Shortest transaction: 0.01
TUNING UP YOUR F-35!
Upgrade to Node 0.5.3+ !
Agent holds sockets for any number of hosts