Веб-сервер Express.js длится 5 минут на производстве, прежде чем не хватит памяти - PullRequest
2 голосов
/ 07 июля 2011

Итак, у меня есть настройка сервера Express.js, но примерно через 5 минут работы - http://balupton.com - он падает и перезапускается.

Исходный код моего сайта находится здесь:https://github.com/balupton/balupton.docpad/blob/master/server.coffee

Ссылка на документацию, которую он использует для создания сервера, находится здесь: https://github.com/bevry/docpad/blob/master/lib/docpad.coffee#L589

Он размещен на http://no.de, и вот исключение нехватки памяти, которое продолжает появлятьсяв журналах каждые 5 минут или около того:

FATAL ERROR: CALL_AND_RETRY_2 Allocation failed - process out of memory
[ Jul  7 14:02:13 Stopping because all processes in service exited. ]
[ Jul  7 14:02:13 Executing stop method (:kill). ]
[ Jul  7 14:02:13 Executing start method ("env `cat /home/node/node-service/profile` /opt/nodejs/latest/bin/node /home/node/node-service/releases/20110707135409/server.js &"). ]
[ Jul  7 14:02:13 Method "start" exited with status 0. ]
Express server listening on port 80 and directory /home/node/node-service/releases/20110707135409/out

Я повсюду смотрел на это, но я сдался.Кто-нибудь может мне помочь?

1 Ответ

9 голосов
/ 08 июля 2011

Проблема оказалась с промежуточным ПО.Наличие статического промежуточного программного обеспечения в последний раз означало, что когда статический файл не был найден, статическое промежуточное программное обеспечение будет пытаться отправить запрос следующему промежуточному программному обеспечению - которого не существует, поэтому он просто будет держать запрос открытым навсегда - поэтому очень быстро открывать соединенияначал накапливать (из-за пауков, просматривающих несуществующие URL) и приводил к аварийному завершению работы сервера каждый раз, когда у него заканчивались ресурсы.

Решением было добавить промежуточное ПО 404 в качестве последнего промежуточного ПО, которое будет работать следующим образом:1003 *

# 404 Middleware
myServerInstance.use (req,res,next) ->
    res.send(404)

Таким образом, когда статическое промежуточное ПО не находит файл, оно отправляет его следующему промежуточному программному обеспечению, в конечном итоге промежуточное программное обеспечение 404 будет запущено и отправит 404 вместо сохранения запроса открытым.навсегда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...