2

AmazonCloudでnode.js/mongoアプリを実行して稼働する準備が整いました。Mongoサーバー用に3xレプリカを設定しています。突然、約20分前に、PRIMARY mongoサーバーが100%のCPU使用率にジャンプするまで(通常はほとんど使用されていません)、すべてが正常に機能していました。私は現在、10人までのユーザーでアプリをテストしているので、これは非常に心配です。

もちろん、私の最初の反応は、サーバーからmongodbログファイルを取得することでした。これが明らかになると思っていましたが、今ではこれまで以上に混乱しています。私のデータベースの主な機能の1つは、ユーザーのデータをキャッシュすることです。そのため、JSON文字列(マングースコード)を格納するだけのコレクション('DataCache')があります。

new Model('DataCache',{ 
  '_id': { type: String, unique: true }, 
 'data': String, 
 'updated': Date });

「100%CPU」時間のログを見ると、標準の更新要求が実行されたことがわかりますが、最大47秒かかります。

Mon Aug  6 08:58:36 [conn28821] update storage.datacache query: { _id: "14954006/mentions/dcc3c69e72da714a0f3bffc518183ebb" } update: { $set: ... } } 47174ms

このリクエストのデータは通常より長くはありませんでした(JSON文字列の約1000文字。簡潔にするために、ここではデータが切り捨てられています)。

なぜ私の使用量が突然急増したのかを理解するために他にどこを探すべきか本当にわかりません。このシナリオで何が異常でユニークなのか想像できません。ログには他に何も表示されませんが、10人のユーザーが数千人に拡大するとどうなるか非常に心配しています...

問題は、起動してから約20分後に突然消えましたが、CPUにはまだ奇妙なスパイクが見られます(RightScaleダッシュボードイメージ)。 RightScale


更新:特にキャッシュコレクションについて、mongoから出力された情報を次に示します。問題がキャッシュコレクションに関係しているのかどうかはわかりませんが、これは、ラグタイム中に最も一貫して表示されていた1つのクエリです...

     {
        "ns" : "storage.datacache",
        "count" : 43949,
        "size" : 132274592,
    "avgObjSize" : 3009.729277116658,
    "storageSize" : 158887936,
    "numExtents" : 13,
    "nindexes" : 5,
    "lastExtentSize" : 33828864,
    "paddingFactor" : 1.0099999999994833,
    "flags" : 1,
    "totalIndexSize" : 10972192,
    "indexSizes" : {
        "_id_" : 4570384,
    },
    "ok" : 1
}

編集:より多くのグラフ ここに画像の説明を入力してください ここに画像の説明を入力してください

4

1 に答える 1

6

一般に、MongoDBでは、CPUスパイクはいくつかの特定の問題から発生します。通常、MongoDBは非常に低いCPUです。通常、IOまたはメモリフットプリントによって完全にバインドされます。

これが(うまくいけば)便利な短いリストです:

  1. 悪いクエリ。これは、インデックスのないクエリです。インデックス付けされていないフィールドがあるDataCacheことに気付きました。Updatedあなたはその分野ですべての質問をしますか?
  2. Map/Reduce。Map / Reduceジョブは通常、1つのコアを100%で「ペグ」します。これらのDBにはコアがいくつありますか?MRジョブを実行していますか?
  3. CPUとしてのIOマスキング。レポートによっては、CPUが実際にCPU_WAITである可能性があります。これは多くの場合ディスクIOです。

したがって、グラフに戻ったら、IO時間とRAM使用量を確認してください。RAM:DATAの比率を把握し、IOのニーズを把握します。また、使用しているマシンの種類をお知らせください。

于 2012-08-06T17:16:10.363 に答える