Активные дескрипторы сервера продолжают увеличиваться и затем останавливают сервер - PullRequest
0 голосов
/ 06 января 2020

Я написал простой API-интерфейс узла, единственная цель которого - просто уведомить пользователя о том, что inte rnet жив. Я запускаю этот API через каждые 3 секунды, и он работает нормально, пока количество активных дескрипторов не достигнет 4000 или меньше, но после этого мой сервер перестает отвечать до момента, когда я перезагружаю сервер. Я запускаю этот сервер через pm2. Я ввел ссылку на изображение моего сервера, когда набираю «pm2 monit».

   const express = require('express');
    const app = express();
    app.get('/users', (req, res) => {
        res.send({status:200, message:'request received'});
        return; // I assume res.send ends the request 
    });

    app.listen(5005, () => {
      console.log('Listening on port 5005');
    });

enter image description here

1 Ответ

0 голосов
/ 07 января 2020

Shantanu, для этого я думаю, что использование express - это перебор. Вы можете попробовать с родным http модулем и можете попробовать то же самое. Ниже приведен код для простого сервера для пинг-понга.

const http = require("http");

http.createServer((request, response) => {
    response.setHeader("Content-Type", "application/json");
    response.write(JSON.stringify({ status: 200, message: "pong" }));
    response.end();
}).listen(8080);

Также я думаю, что кластеризация pm2 может вызвать проблемы с этим. Нативная кластеризация может быть альтернативой pm2 для этого варианта использования.

Попробуйте приведенный выше код с pm2, если проблема не устранена, затем попробуйте использовать собственную кластеризацию с использованием модуля cluster.

Ниже приведен тест нагрузки для того же самого с использованием осада. Код работает хорошо в моей системе.

Siege Report http://localhost:8692/

...