私は主にいくつかの単純なPHP Webサイト(RDSをデータベースとして使用)のWebサーバーとしてApacheを実行するm1.small EC2インスタンスを持っています。サーバーの負荷平均は常に非常に高いです(約8)。絶対5未満ではありません。これにより、私のウェブサイトが2.6GHz CPUと1.7GB RAMで予想していたよりもはるかに遅くなり、迷惑なほど遅くなりました。
top
そして、友達は「盗んだ」時間(AFAIU、ハイパーバイザーが同じCPUから別のVMを盗む時間)の約50%を除いて、残りはほぼ完全に「IRQ」時間であることを示しました。
mpstat
この時間は非常に安定した191.59の割り込み/秒で消費されます(つまり、この数は時間の経過とともにほとんど変わりません)、「/ proc / interrupts」によると、この時間は大部分でxen-percpu-virq timer0
消費されますxen-dyn-event eth0
。
これらは何ですか?負荷を軽減し、PHP Webサイトでより多くの時間を費やすためにEC2インスタンスを取得するにはどうすればよいですか?
答え1
ちょっと見てみると「ハードウェアの問題」のようです。 VMをホストする物理サーバーは他のVMの負荷が高い可能性が高く、m1
そのタイプのマシンではパフォーマンスを保証できないため、すべてのCPU時間はホストに残ります。仮想マシンが仮想マシンがCPUコア0で実行されている場合、マシンはすべての割り込み処理も実行します。これを見てゼンウィキ記事「HVM VMの最初の(そしておそらく唯一の)VCPUが完全に活用されています」でこれを見てください。AWS はスレッドをサポート同様の中断問題がある他の人のため。
この時点で唯一の解決策は、仮想マシンを別の物理ホストに移行することです。時にはVMを停止して数分待ってから再起動すると、非常に簡単に完了できます。その間、EC2が以前のホストに別のVMを割り当てた場合は、別のスロットを取得して問題を解決することができます。
それでも問題が解決しない場合は、最良の方法は仮想マシンから新しいイメージを作成し、別のアベイラビリティーゾーンから起動することです。これにより、IP が交換され、セキュリティグループとファイアウォールルールを更新する必要があります。また、イメージを作成する前にVMを停止する必要があります。つまり、イメージの作成後に新しいVMが起動する前に、古いVMが新しいデータを生成しないようにする必要があります。