Skip to content

Commit 2cfda43

Browse files
committed
Benchmark memory usage as well
1 parent 4b8ec72 commit 2cfda43

2 files changed

Lines changed: 46 additions & 9 deletions

File tree

bench/index.js

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,27 @@ const table = require('tty-table')
88
const ports = {http: 3010, fastify: 3011, polka: 3012, scrud: 3013, express: 3014}
99
const results = []
1010
const benchId = 301
11+
const children = {}
12+
const memory = {}
1113
Promise.all(Object.keys(ports).map((k) => new Promise((resolve, reject) => {
12-
let child = fork(join(__dirname, 'server'), [k])
14+
let child = children[k] = fork(join(__dirname, 'server'), [k])
1315
child.once('error', (err) => {
1416
console.log(err)
1517
process.exit()
1618
})
17-
child.once('message', (m) => {
18-
(m === k) ? resolve() : reject(m)
19+
let started
20+
let gotMemory
21+
child.on('message', (m) => {
22+
let endMem = m.match(/^endMem(.*)/)
23+
if (endMem) {
24+
memory[k].end = endMem[1]
25+
child.kill()
26+
}
27+
started = started || m === k
28+
let startMem = m.match(/^startMem(.*)/)
29+
gotMemory = gotMemory || startMem
30+
if (startMem) memory[k] = {start: startMem[1]}
31+
if (gotMemory && started) return resolve()
1932
})
2033
}))).then(() => bench())
2134

@@ -37,7 +50,7 @@ const shuffler = (array) => {
3750
const formatBytes = (bytes) => {
3851
if (bytes === 0) return '0 Byte'
3952
let k = 1000
40-
let dm = 3
53+
let dm = 2
4154
let sizes = ['Bytes', 'KB', 'MB', 'GB']
4255
let i = Math.floor(Math.log(bytes) / Math.log(k))
4356
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]
@@ -76,6 +89,11 @@ const checkConsistency = async (name) => {
7689
last = {lib: name, result: tmpRes}
7790
}
7891

92+
const getEndMemory = (name) => new Promise((resolve, reject) => {
93+
children[name].on('exit', () => resolve())
94+
children[name].send('endMemory')
95+
})
96+
7997
async function bench () {
8098
console.log(`servers running, starting benchmarks\n`)
8199
let keys = shuffler(Object.keys(ports))
@@ -88,16 +106,25 @@ async function bench () {
88106
}
89107
}
90108
for (let name of keys) await bencher(name)
91-
let head = ['lib', 'req/sec', 'latency', 'throughput', 'errors'].map((h) => {
92-
return {alias: h}
93-
})
109+
for (let name of keys) await getEndMemory(name)
110+
let head = [
111+
'lib',
112+
'req/sec',
113+
'latency',
114+
'throughput',
115+
'errors',
116+
'memory (start)',
117+
'memory (end)'
118+
].map((h) => { return {alias: h} })
94119
results.sort((a, b) => b.requests.average - a.requests.average)
95120
let rows = results.map((r) => [
96121
r.title,
97122
r.requests.average,
98123
r.latency.average,
99124
formatBytes(r.throughput.average),
100-
r.errors + r.non2xx
125+
r.errors + r.non2xx,
126+
memory[r.title].start.split('/').map(formatBytes).join('\n'),
127+
memory[r.title].end.split('/').map(formatBytes).join('\n')
101128
])
102129
console.log(table(head, rows).render())
103130
process.exit()

bench/server.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
'use strict'
22

33
const ports = {http: 3010, fastify: 3011, polka: 3012, scrud: 3013, express: 3014}
4-
const logStart = (n) => process.send(n)
4+
const logStart = (n) => {
5+
process.send(n)
6+
let { heapUsed, heapTotal } = process.memoryUsage()
7+
process.send(`startMem${heapUsed}/${heapTotal}`)
8+
}
9+
process.on('message', (m) => {
10+
if (m === 'endMemory') {
11+
let { heapUsed, heapTotal } = process.memoryUsage()
12+
return process.send(`endMem${heapUsed}/${heapTotal}`)
13+
}
14+
})
515
const benchId = 301
616
const start = {
717
http: () => {

0 commit comments

Comments
 (0)