2011-07-07 5 views
2

Express.jsサーバーがセットアップされていますが、約5分後に生産中です - http://balupton.com - クラッシュして再起動します。Express.js Webサーバーはメモリ不足時に5分間稼働します。

私のウェブサイトのソースコードはここにある:それはサーバーを作成するために使用するhttps://github.com/balupton/balupton.docpad/blob/master/server.coffee

docpadの参照はここにある: https://github.com/bevry/docpad/blob/master/lib/docpad.coffee#L589

それは、http://no.de上でホストされ、ここで続けてメモリ不足の例外のうちですよ

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
:ログに5分ごとかそこらの登場

私はこれをどこでも見てきましたが、私はあきらめました。誰でも助けてくれますか?

答えて

9

ミドルウェアの問題が判明しました。静的なミドルウェアは、静的なファイルが見つからなかった場合、静的なミドルウェアは次のミドルウェアに要求を送信しようとします。存在しなかったため、リクエストを永久にオープンに保ちます。 (存在しないURLをクロールするスパイダーのために)ピリングアップを開始し、リソースがなくなるたびにサーバーをクラッシュさせます。静的なミドルウェアがファイルを見つけられないとき

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

この方法では、それは次のミドルウェアにそれを送信します。

ソリューションはそうのように実行するために、最後のミドルウェアとして404ミドルウェアを追加しました最終的には404ミドルウェアがヒットし、リクエストを永遠に開かずに404を送ります。

関連する問題