утечка памяти?
Есть простой когд для статики (нода 5.11)
И он потихоньку отжирает память, и я не пойму почему, через час доходит до 100 метров, это локальный сервер, он просто отдает файлы, что я делаю не так? "use strict"; var http = require("http"), url = require("url"), path = require("path"), fs = require("fs"), mime = require("mime"); var staticPath = path.resolve("scripts-dist"); function getFile(filename) { if(fs.existsSync(filename)) { return fs.readFileSync(filename, "binary"); } return null; } http.createServer(function(request, response) { var uri = url.parse(request.url).pathname, filename = path.join(staticPath, uri); let file = getFile(filename); if(file) { response.writeHead(200, {"Content-Type": mime.lookup(filename)}); response.write(file, "binary"); response.end(); } else { response.writeHead(404, {"Content-Type": "text/plain"}); response.write("404 Not Found\n"); response.end(); } }).listen(3001); |
cyber,
Не получается ли такой ситуации, что я сделал запрос на сервер, файл начинает считываться, я закрываю соединение, не дождавшись окончания загрузки и весь наполовину считанный файл зависает в оперативной памяти сервера? Или происходит считывание большого файла в оперативную память и затем он начинает отдаваться клиенту. А если клиент медленный или таких клиентов много? |
Нода использует ленивый сборщик мусора, который не освобождает память до последнего - https://blog.heroku.com/node-habits-...-avoid-garbage.
+ проблемы destus'а. На локалхосте-то еще ладно, но в продакшене они угробят твой сервер. Мало того, твой код попросту небезопасен. Что, если клиент запросит, скажем, ссылку "http://server.com/../.git"? В таких случаях надо использовать потоки, но и там есть свои ньюансы. У Ильи в скринкасте по ноде есть видео по этой теме, глянь: https://www.youtube.com/watch?v=KlvJOz9GUjU https://www.youtube.com/watch?v=_j0LoOXnOF4 |
Цитата:
Цитата:
"use strict"; var http = require("http"), url = require("url"), path = require("path"), fs = require("fs"), mime = require("mime"); var staticPath = path.resolve("scripts-dist"); function getFile(filename) { if(fs.existsSync(filename)) { return fs.readFileSync(filename, "binary"); } return null; } http.createServer(function(request, response) { var uri = url.parse(request.url).pathname, filename = path.join(staticPath, uri); var file = getFile(filename); if(file) { response.writeHead(200, {"Content-Type": mime.lookup(filename)}); response.write(file, "binary"); response.end(); file = null; global.gc(); } else { response.writeHead(404, {"Content-Type": "text/plain"}); response.write("404 Not Found\n"); response.end(); } }).listen(3001); Цитата:
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 20:01. |