http-proxy (обратный прокси) сервер зависает в случайное время - PullRequest
1 голос
/ 27 января 2020

Проблема: Когда я отправляю запрос после этого журнала (памяти), он показывает ошибку «зависание сокета (connResetException)». И сервер NodeJS перестает работать.

[1:0x330e8a0]    22724 ms: Mark-sweep 16.4 (25.2) -> 10.6 (29.9) MB,
 3.3 / 0.0 ms  (+ 0.1 ms in 2 steps since start of marking, biggest step 0.1 
ms, walltime since start of marking 7 ms) (average mu
 = 0.999, current mu = 1.000) finalize incremental marking
 via task GC in old space requested

Архитектура: Я использую http-proxy в качестве обратного прокси-сервера. Он включает единый вход (SSO) и отправляет его трафик в приложение.

Журнал ошибок на прокси-сервере (только в производстве - больше трафика)

/node_modules/http-proxy/lib/http-proxy/index.js:120
    throw err;
    ^

Error: socket hang up
    at connResetException (internal/errors.js:561:14)
    at Socket.socketCloseListener (_http_client.js:380:25)
    at Socket.emit (events.js:214:15)
    at TCP.<anonymous> (net.js:658:12) {
  code: 'ECONNRESET'
}

Поскольку зависание сокета происходит с МНОГИМИ случаями, я исследовал и экспериментировал с различными случаями. И я думаю, что проблема утечки памяти из моего узла может быть проблемой. node --trace_gc src/index.js команды печатают 2 ~ 3 allocation failure с на запрос.

Странные журналы

 [1:0x449d780]    20364 ms: Scavenge 11.9 (13.2) -> 11.3 (13.2) MB, 3.2 / 0.0 ms \
     (average mu = 0.961, current mu = 0.961) allocation failure 

Исходный код

var apiProxy = httpProxy.createProxyServer();
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json())

app.use(passport.initialize({}));
app.use(passport.session({}));
app.use(session({
    secret: 'secret',
    resave: false,
    saveUninitialized: true,}
));

app.get('/source*',
    function(req, res, next) {
        req.query.RelayState = req.url;
        if(req.user) {
            apiProxy.web(req, res, {target: xx});

Проблема: [http-proxy expressjs] зависает в случайное время. Обычно это работает в течение двух дней, и сервер выходит 502 Ошибка. Мне нужно вручную перезапустить контейнер, чтобы восстановить его.

/node_modules/http-proxy/lib/http-proxy/index.js:120
    throw err;
    ^

Error: socket hang up
    at connResetException (internal/errors.js:561:14)
    at Socket.socketCloseListener (_http_client.js:380:25)
    at Socket.emit (events.js:214:15)
    at TCP.<anonymous> (net.js:658:12) {
  code: 'ECONNRESET'
}

Любая идея приветствуется ... пожалуйста, помогите 10

...