Javaゲームサーバーでは、どのサーバーリソースが遅延を引き起こしているのかわかりません。私のゲームサーバーの最後のパッチでEC2ランプサーバーを更新しました。Apache2.2、php5.3、mysql5.5到着Apache2.4、php7.0、mysql5.6。また、何よりも、各ゲームループを循環するモンスターのインスタンスをさらに含むようにゲーム自体を更新しました。
画像が示すように、最後のスクリーンショットでは、私のJavaプロセスのCPU使用率は約80%で安定していますが、負荷平均は1.20に達しました。今朝は2.7まで上がったこともあります。 CPUクレジットはサーバーの実際のCPU使用率に影響を与えるため、クレジット残高が減少するとパーセンテージも高くなりますが、これは意味がありますが、サーバーが80%に遅れるのはなぜですか?
私のAmazon EC2指標では、CPUは10%で表示されます(これはさらに混乱しています)。
サーバーを起動すると、MMORPGにまったく遅延がありません。その後、CPUクレジットが不足すると遅延が発生し始めました。これはCPUベースのように感じますが、10%と80%を見ればなぜそうなのか理解できません。どんな助けでも大変感謝します。私はT2.microインスタンスを使用しているので、vCPUが1つあります。次のインスタンスにアップグレードすると、価格はほぼ2倍になり、同じvCPU 1を維持しますが、ポイントが増えます。
簡単に言えば、80%という数字が私を混乱させるので、私に何が起こっているのかを完全に理解したいと思います。私はこの問題に単にお金を投資したくありません。
答え1
の値が大きいことに気づきましたかst
?これは「盗まれた」CPU サイクルです。 CPUクレジットの残高がほとんどまたは完全に枯渇して使用できないサイクルです。
10%使用量は、特定の期間(約5分)の平均使用量です。出力を見ると、top
時間の経過とともに100% - 盗難 - アイドル状態が約10%であることがわかります。
この時点では、デフォルトで使用可能なCPUスペースはありません。これらの条件下では、時間のかかるワークロードは一貫性のない応答性を示すと予想されます。
t2.microと比較してワークロードが大きすぎます。そうでない場合、デフォルトでは定義に従って常にCPUクレジットが過剰になります。労力を減らしたり、コードをより効率的にするために何かをすることができない場合、現在の症状はより大きなインスタンスクラスが必要であることを示しています。
答え2
CPUクレジット残高が空の場合、ホスト(ハイパーバイザー、基本ハードウェア)は仮想ec2にプロセッサ時間を提供しません(非常に少ない時間を除く)。この非常に少ない量はsshには十分ですが、javaという空腹のモンスターを実行するのに十分ではありません。したがって、インスタンスは特定の時間スリープ状態にあるため遅延されますが、実際の世界(プレイヤーを含む)ではそうではありません。
唯一の解決策は、CPUのバランスを高めることです。つまり、インスタンスのサイズを増やすか、必要な方法で負荷を軽減することです。インスタンスが機能しない素晴らしいクレジットが使い果たされると、期間は終了します。