タイトルはあえて煽らさせていただいています。
質問概要
EC2のインスタンスのCPU使用率が突発的にstealによって占領される問題がよく起きます。
この問題を解決する方法を教えてください。
事象
ご覧のように、突然stealが跳ね上がりサービスが提供できない状態に陥ります。画像からはわからないと思いますが、一旦こうなるとほとんどのアクセスに応答しなくなります。
一旦stealが大きくなると自然回復することはなく、別のEC2インスタンスを立ち上げることでしか回復しません。
事象の再現性
・2台構成にしてアクセス数やCPUを分散させているときには一度も起きませんでしたが、1台構成にするとおよそ24時間以内に発生することが多いです。
・発生するタイミングは不確定です。
・microインスタンスでも、smallインスタンスでも生じました。
・CPUやアクセス数が小さいほど起きにくい傾向があります。
このため、AWSがうたっているEC2のスペックを事実上使うことができません。
実際に、今はsmallインスタンスを使っていますが、CPUを約20%以下に抑えなければ安定した運用ができません。しかしこれでは当初見積もっていたコストで運用することができません。
この問題が解決できなければEC2をやめて、さくらVPSもしくはLambdaへの移行を考えています。
すでに行った対策1
ぐぐってみると、使っているEC2インスタンスのハードウェアがたまたまイケてないことがあるらしく、EC2インスタンスの停止・起動をすれば直ることがあるとのことでした。
確かにその方法で直ることはあるのですが、問題なのは突然stealのCPU専有が始まりサービスが落ちることですので、起きてからの対応では遅いのです。
すでに行った対策2
アクセスが詰まっているのだとしたら、詰まりにくくしてやればよいのではないかと思い、スレッドプールの設定を以下のようにmaxを大きめに設定しました。
http-thread-pool:max 100, min 20
thread-pool-1:max 200, min 5
しかし問題の起きやすさに変化はありませんでした。
参考資料 サービスの構成
AWSロードバランサー
↓
Web Server (Apache)(1 server)
↓
Application Server (Glassfish)(1 server)
参考資料 その他
アクセス量は15 requests / sec ほどで、APIサーバとして使っています。
1回のアクセスにつき、DynamoDBに対して3回のRead処理を行っていますが、その他特に重い処理は行っていません。
どのあたりに問題がありそうでしょうか?

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。