I created a simple node application for training. It should do this simple sequence of task:
This is a source code for this app:
var express = require("express");
var jade = require('jade');
var app = express();
var db = new (require('sqlite3').verbose()).Database('data.db');
var fib = function (n) {
if (n === 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
return fib(n - 1) + fib(n - 2)
}
};
app.get("/:number", function (req, res) {
var number = req.param("number");
query = db.prepare("INSERT INTO data VALUES (?)");
var result = fib(number)
for(var i=0; i<10; i++) {
query.run(result, function(err) {
if(err != null) {
throw new Error();
}
});
};
db.all("select * from data limit 100", function(err, rows){
var rendered = jade.renderFile('template.jade', {list: rows})
res.send(rendered);
});
});
db.get(
"SELECT name FROM sqlite_master WHERE type='table' AND name='data'",
function (err, row) {
if(err !== null) {
throw new Error();
}
if(row === undefined) {
db.run('create table data (value text)')
}
app.listen(3000);
}
);
Now I trying to test this application with wrk utility. I use the command wrk -c 64 -d 30s http://localhost:3000/10
On the first run I see this output:
Running 30s test @ http://localhost:3000/10
2 threads and 64 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 21.37s 2.54s 22.48s 84.42%
Req/Sec 0.91 1.82 6.00 81.82%
64 requests in 30.01s, 78.25KB read
Socket errors: connect 0, read 0, write 0, timeout 896
On the second output changes:
Running 30s test @ http://localhost:3000/10
2 threads and 64 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 0.00us 0.00us 0.00us -nan%
Req/Sec 0.00 0.00 0.00 -nan%
0 requests in 30.01s, 0.00B read
Socket errors: connect 0, read 0, write 0, timeout 947
Why application doesn't response after 64's request?