Я тестирую Артиллерия , и я создал приложение, которое проверяет его поведение, когда конечная точка реагирует слишком долго.Чтобы смоделировать это, я создал следующее фиктивное приложение Express:
const express = require("express");
const app = express();
const PORT=3000;
const dateFormat = require("dateformat");
app.get("/timeout",(req,res) => {
console.log("Processing...")
var now = Date.now();
setTimeout(() => {
var next = Date.now();
delta = next - now;
res.send("Time:" + dateFormat(delta, "MM:ss"));
console.log("Responded!");
}, 10000);
});
app.listen(PORT, ()=> {
console.log("Listening to the port", PORT);
})
process.on('uncaughtException', (err) => {
console.log("========Uncaught exception========");
console.log(err);
});
У меня оно запущено через докер.Сценарий артиллерии, который я запускаю, таков:
config:
environments:
node:
target: 'http://localhost:3000/node'
plugins:
statsd:
host: localhost
port: 8125
prefix: "artillery-node"
pool: 50
phases:
- name: Plain
duration: 120
arrivalRate: 5
- name: Ramp up
duration: 825
arrivalRate: 5
rampTo: 60
- name: Heavy
duration: 30
arrivalRate: 60
scenarios:
- name: Timeout (/timeout)
flow:
- get:
url: '/timeout'
Теперь, когда я запускаю артиллерию с этой конфигурацией, в конце концов узел выдаст эту ошибку и завершится:
FATAL ERROR: v8::ToLocalChecked Empty MaybeLocal.
node::Abort() [node]
0x8c21ec [node]
v8::Utils::ReportApiFailure(char const*, char const*) [node]
node::TCPWrap::Instantiate(node::Environment*, node::AsyncWrap*, node::TCPWrap::SocketType) [node]
node::ConnectionWrap<node::TCPWrap, uv_tcp_s>::OnConnection(uv_stream_s*, int) [node]
0x141f590 [node]
0x1424d48 [node]
uv_run [node]
Run(Nan::FunctionCallbackInfo<v8::Value> const&) [/usr/app/node_modules/deasync/bin/linux-x64-node-8/deasync.node]
0x7f1d995811d7 [/usr/app/node_modules/deasync/bin/linux-x64-node-8/deasync.node]
v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) [node]
0xad712c [node]
v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*) [node]
0x3daca6b842fd
Aborted
npm ERR! code ELIFECYCLE
npm ERR! errno 134
npm ERR! js@1.0.0 start: `node app.js`
npm ERR! Exit status 134
npm ERR!
npm ERR! Failed at the js@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2018-10-13T16_20_51_567Z-debug.log
Я исследовал некоторые, и этоможет быть, что исключение выдается из-за TCP закрытия сокета.Но если это произойдет, как я могу избежать этого?
Спасибо