0

Amazonec2インスタンスにmongoサーバーを備えたノードアプリがあります。うまく機能しますが、新しいAPI呼び出しを追加しただけで、呼び出すたびにサーバーがフリーズし、数時間アクセス/SSH接続できなくなります。これが発生している間、サーバーがダウンし、サーバーに依存しているアプリが使用できなくなり、ユーザーが怒ります...

このコードはローカルホストで完全に機能しますが、サーバーで実行するとすぐにフリーズします。私の考えは、それがモンゴを墜落させるかもしれないということですか?なぜこれが起こるのか分かりません...

誰かが何がうまくいかないかについて何か考えがあれば、私に知らせてください。

ノードはエクスプレスを使用しています。send_error関数はres.send({some error})を実行します。db.CommentModelはmongoose.model('comment'、Comment);を返します。

app.jsで

app.get('/puzzle/comment/:id', auth.restrict, puzzle.getComments);

getCommentsを定義するファイル内

exports.getComments = function(req, res)
{   
    var userID = _u.stripNonAlphaNum(req.params.id);

    var CommentModel = db.CommentModel;
    CommentModel.find({user: userID}, function(e, comments) {
        if(e) 
        {
            err.send_error(err.DB_ERROR, res);
        }
        else if (!comments)
        {
            err.send_error(err.DB_ERROR, res);
        }
        else if (comments.length == 0)
        {
            res.send([]);
    }
    else
    {
        var commentIDs = [];
        for (var i = 0; i<comments.length; i++)
        {
            commentIDs.push({_id: comments[i].puzzle});
        }
        var TargetModel = pApp.findPuzzleModel(_u.stripNonAlphaNum(req.apiKey));
            TargetModel.find({removed: false, $or: commentIDs}, function(e, puzzles) {
                if(e) 
                {
                    err.send_error(err.DB_ERROR, res);
                }
                else if (!puzzles)
                {
                    err.send_error(err.DB_ERROR, res);
                }
                else
                {
                    res.send(puzzles);
                }
            });
        }
    });
}
4

1 に答える 1

0

クエリがサーバー上の何か(場合によってはmongo)で非常に大量のCPUを消費しているようです。これが、SSHアクセスで発生した問題の原因であることが一般的です。

mongoインスタンスのログを読み、実行時間の長いクエリがあるかどうかを確認する必要があります。

Monngodbは、長時間実行されるコマンドを調べるための内部プロファイラーを提供します。長時間実行されるプロファイリングレベルを1に設定して、コマンドを実行し、ログファイルの出力を調べてみてください。

プロファイラーの詳細については、http://www.mongodb.org/display/DOCS/Database+Profilerをご覧ください。

于 2012-09-07T02:52:01.547 に答える