Утечки памяти абсолютно без причины - PullRequest
0 голосов
/ 02 июля 2018

Итак, у меня есть простейший пример socket.io:

'use strict';

const server = require('http').createServer();
const io = require('socket.io')(server);

server.listen(8080, function () {

});

io.on("connection",function(socket){

    socket.on('disconnect', function (data) {

    });

    socket.on('sync', function(data) {

    });

    socket.on('enter', function(data) {

    });
});

Я протестировал этот код с помощью простого скрипта Artillery.io, который просто имитирует 60 пользователей, приходящих в течение 60 секунд и отправляющих по 600 бессмысленных «синхронизирующих» сообщений каждый. Я создал несколько снимков кучи и обнаружил, что память постоянно выделяется конструкторами (массив) , (скомпилированный код) и (система) . На самом деле я вижу выделение и удаление памяти, но дельта по-прежнему всегда положительна:

enter image description here

В конструкторе (массив) я вижу некоторые 'deoptimization_data' , 'переходы' и другие, вероятно, внутренние объекты V8. Когда я смотрю на вкладку Retainers, я вижу, что на эти объекты как-то ссылаются разные объекты node.js и socket.io. Если вы запустите этот проект самостоятельно и сделаете несколько снимков кучи с помощью Chrome DevTools, вы, вероятно, увидите то же самое.

У меня также есть свое собственное приложение (простая игра с использованием socket.io, которое я тестировал без artillery.io), и когда я делаю снимки кучи во время игры, я замечаю, что у меня нет утечек памяти, связанных с моими собственными объектами (слава Богу) XD), но я все еще получаю такое же непрерывное распределение памяти с теми же конструкторами (массив) , (скомпилированный код) и (система) . И я снова вижу это 'deoptimization_data' , 'transitions и другие объекты V8. Это выглядит примерно так:

enter image description here

Эти три конструктора медленно потребляют мою память даже с самым простым примером socket.io, который я мог создать. Что они и что я могу с ними сделать, чтобы остановить утечки памяти?

...