Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Утечка памяти (https://javascript.ru/forum/node-js-io-js/59559-utechka-pamyati.html)

Nogard7491 16.11.2015 15:42

Утечка памяти
 
Кто нибудь сталкивался с утечкой памяти простого http сервера?
var http = require("http");

http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}).listen(3000);


Обновляю страницу, растёт расход памяти и не снижается. В чём может быть проблема и как пофиксить?

pnpquest 16.11.2015 16:41

попробовал твой код, никаких утечек не заметил.
Попробуй сменить версию ноды

Nogard7491 16.11.2015 16:56

да вроде сменил на 5.0.0, она же последняя версия?
а проблема в ОС может быть? у меня Ubuntu-14.04-amd64

pnpquest 16.11.2015 17:03

Не знаю, я не слежу. Сменить версию не значит обязательно сменить на последнюю. Я сомневаюсь, вообще то, что из-за ноды это происходит. У Вас, единственное, что подозрительно в коде, ф-ция createServer, она устарела, обычно рекомендуется http.Server. Но дело вряд ли в этом, конечно, это скорей всего просто алиас.

Возможно, утечки вызваны просто слишком частой перезагрузкой страницы. Попробуйте другую страницу, и сравните.

Nogard7491 16.11.2015 17:06

Цитата:

Сообщение от pnpquest (Сообщение 396364)
Не знаю, я не слежу. Сменить версию не значит обязательно сменить на последнюю. Я сомневаюсь, вообще то, что из-за ноды это происходит. У Вас, единственное, что подозрительно в коде, ф-ция createServer, она устарела, обычно рекомендуется http.Server. Но дело вряд ли в этом, конечно, это скорей всего просто алиас.

Возможно, утечки вызваны просто слишком частой перезагрузкой страницы. Попробуйте другую страницу, и сравните.

да, страницу я перезагружал часто, фактически зажал F5, но всё равно не должно быть утечки и сборщик мусора должен освободить память

Nogard7491 16.11.2015 17:17

посмотрел сейчас сколько памяти, за 2 часа с 13% занимаемой оперативки до 9.8% упало. видимо в сборщике мусора дело

nick1m 16.11.2015 17:54

Там незакрытые сокеты, по умолчанию, разрываются через 2 минуты. Не знаю, решили ли данную проблему в последних версиях, но было так. Где-то на хабре была статья по данному поводу и описывались способы принудительного разрыва (убивания) незакрытых сокетов.

Nogard7491 16.11.2015 18:03

ну 2 часа же прошло! сейчас переустановил Ось и запускаю код повторно, та же ситуация

pnpquest 16.11.2015 18:07

Цитата:

Сообщение от nick1m
Там незакрытые сокеты, по умолчанию, разрываются через 2 минуты. Не знаю, решили ли данную проблему в последних версиях, но было так. Где-то на хабре была статья по данному поводу и описывались способы принудительного разрыва (убивания) незакрытых сокетов.

Это вообще странная фигня, что в этой_вашей_ноде нельзя закрыть сокет без плясок с бубном.

А "проблему" эту решить вряд ли возможно, тут не в версии дело. Насколько я понимаю, у нас по умолчанию браузер создает соединение keep-alive, соответственно, нода не может закрывать сокет быстро, ей нужно ждать какое то время.

Nogard7491 16.11.2015 18:09

я вот на Centos пробовал ставить, сейчас вернулся на Ubuntu опять. Обновил ноду до v5.0.0. Запускаю, обновляю страницу до тех пор пока потребляемая оперативная память не вырастит до 5%. После останавливаюсь и смотрю через top когда она освободится. Результата нет.

nick1m 16.11.2015 18:10

Цитата:

Сообщение от Nogard7491 (Сообщение 396375)
ну 2 часа же прошло! сейчас переустановил Ось и запускаю код повторно, та же ситуация

А браузер другой не пробовали? Может его косяк?

Попробуйте ещё посмотреть количество открытых соединений между нажатиями F5, команда:
# netstat -an| wc -l

nick1m 16.11.2015 18:14

Цитата:

Сообщение от Nogard7491 (Сообщение 396379)
я вот на Centos пробовал ставить, сейчас вернулся на Ubuntu опять. Обновил ноду до v5.0.0. Запускаю, обновляю страницу до тех пор пока потребляемая оперативная память не вырастит до 5%. После останавливаюсь и смотрю через top когда она освободится. Результата нет.

Да и не верится что-то, что столько может отжирать, сколько там один сокет съедает, не помню уже, но копейки. F5 задолбишься держать, что б ы открыло хотя бы тысячу. :)

pnpquest 16.11.2015 18:17

Цитата:

Сообщение от nick1m
Попробуйте ещё посмотреть количество открытых соединений между нажатиями F5, команда:
# netstat -an| wc -l

попробовал щас у себя(debian), не, не растет кол-во соединений особо. Пробовал на хроме

Nogard7491 16.11.2015 18:20

34 соединения, %MEM как поднялся, так и не спадает

nick1m 16.11.2015 18:22

Вот, нашёл статью: http://habrahabr.ru/post/264851/
Помоему оно.
Если поможет, отпишитесь плз.

pnpquest 16.11.2015 18:23

nick1m,
LOL, а curl'ом пробую, растет очень быстро. И и зарываются медленно. Да, получается нода говно. Ее убить легко. Тут все клиентом фактически разруливается, похоже.

Nogard7491 16.11.2015 18:23

спасибо, просмотрю

nick1m 16.11.2015 18:23

Цитата:

Сообщение от Nogard7491 (Сообщение 396383)
34 соединения, %MEM как поднялся, так и не спадает

Так соединения открытые увеличиваются при нажатии F5 или стоят на месте?

nick1m 16.11.2015 18:24

Цитата:

Сообщение от Nogard7491 (Сообщение 396386)
спасибо, просмотрю

там первый коммент как раз про память и идёт, что помогло..

Nogard7491 16.11.2015 18:27

было 32, подержал F5 секунд 10 стало 34

nick1m 16.11.2015 18:27

Цитата:

Сообщение от pnpquest (Сообщение 396385)
nick1m,
LOL, а curl'ом пробую, растет очень быстро. И и зарываются медленно. Да, получается нода говно. Ее убить легко. Тут все клиентом фактически разруливается, похоже.

Я пытался в обратном направлении, при множественных открытых внешних запросах, иногда сокет открывается системой, и подвисает, а нода его рубит только спустя время, т.о. накапливается пачка висящих, ничего не получилось. Но из меня программер как балерина :).

nick1m 16.11.2015 18:31

Цитата:

Сообщение от Nogard7491 (Сообщение 396390)
было 32, подержал F5 секунд 10 стало 34

Ну тогда вообще странно. Хотя это не мой уровень знаний, возможно в одном соединении висит несколько сокетов..

Nogard7491 16.11.2015 18:45

сработало, но вернулся к старому коду и в нём тоже перестала оператива расти.

Nogard7491 16.11.2015 18:48

провёл сейчас такой опыт, обновлял страницу пока %MEM не вырос до 10.6, жду 5 минут и ничего. начинаю опять обновлять страницу и %MEM падает до 8.3. Приложение на основе фреймворка express. Потом ещё обновил и планка упала до 7.8%.


Часовой пояс GMT +3, время: 04:29.