前提・実現したいこと
mongoDBにnode.jsで記述したプログラムのfindOneAndUpdate()で同時に大量のアクセスをするとCPUをすべて消費してしまいレスポンスに1分以上かかるという状態になっております。
同時アクセス数は300程度で、mongoDBを置いているサーバーはGCPのn1-standard-2(vCPU x 2、メモリ 7.5 GB)です。
接続を作ったり、単純なfind()やupdate()ではこのようにCPUを大量に消費しないので、findOneAndUpdate()に問題があるのでしょうか?
単純にサーバーのスペックを上げる以外の解決方法がありましたらご教授願いたいです。
詳しい方がいらっしゃいましたら回答をどうかよろしくお願い致します。
発生している問題
CPUリソースをすべて消費してしまい、レスポンスが使用困難なほど遅くなる
該当のソースコード
nodejs
1findOneAndUpdate( 2 {'available':true, 'finish':false}, 3 {$set:{'available':false}}, 4 {sort:{'postNum':-1}} 5)
document
1_id:id 2url:URL 3available:true/false 4finish:true/false 5postNum:投稿数 6timestamp:タイムスタンプ
補足情報(FW/ツールのバージョンなど)
アプリケーション | バージョン |
---|---|
mongoDB | 4.0.2 |
node.js | 10.15.0 |
サーバー | CPU | メモリ |
---|---|---|
GCE | vCPU x 2 | 7.5GB |
追記
現在300のプログラムが常にmongoDBとの接続を持っており、必要なときにfindOneAndUpdate()などのメソッドを使ってアクセスするという形になっております。
質問に対する返答
- mongoDBは1台のみの攻勢となっております。
- 上記の要素をもつドキュメントが8500件ほどあります。
- GCPのサーバー上ではmongoDB以外の動作は行っておりません。
- findOneAndUpdate()の部分をfindOne()とupdate()にわけて実行したところ、CPUが上限に行くことはありませんでした。しかし、この方法ですとupdate前に同じドキュメントをfindOne()で取得してしまうことがあったので、可能な限りfindOneAndUpdate()を使う方法で行きたいと考えています。
回答1件
あなたの回答
tips
プレビュー