つい先ほど、とあるLightsailインスタンスのCPU使用率が10%近くなっていました。結果として、そこで稼働しているアプリケーションの一部を別のサーバーに移転せざるを得なくなりました。
一見、CPU使用率に余裕はあるように見えます。ですが、Lightsailインスタンス、具体的には内部で使われているT2インスタンスの性質を考えるとこれはかなりギリギリの状態でありました。
CPU使用率の目安については、この記事の後半に掲載しています。
LightsailインスタンスのCPUは共有
大前提として、Lightsailインスタンスで使われるCPUは共有です。つまり、CPUの全量を常に使えるわけではありません。
元となっているT2インスタンスを考えるとよいかと思います。各インスタンスは、ベースラインパフォーマンスと呼ばれる、最低限度のラインまではCPUを使えます。ですが、それを超えた分に関してはバーストとして扱われ、バースト可能な時間には制限があります。ベースラインパフォーマンスはプランによって変わります(この後記載します)。
バースト可能な時間はCPU使用率やインスタンスサイズによって異なりますが、限界点があります。この限界点に達した瞬間、CPU使用率はベースラインパフォーマンスまで強制的に落とされ、インスタンスの動作は急激に重くなってしまいます。
この現象が起きた場合、CPU使用率のほとんどが%stealの表示となります。これはバーストの使い過ぎによって起きた現象であり、不具合や故障ではありません。CPU使用率を抑えてしばらく放置すると、またバースト可能な状態に戻ります。
LightsailプランごとのCPU使用率の目安
プランごとに異なります。次のCPU使用率を目安にしましょう。
プラン(月額) | 仮想コア | メモリ(GB) | CPU使用率の目安 | |
全仮想コア平均 | 仮想コア単位 | |||
3.5USD | 1 | 0.5 | 5% | 5% |
5USD | 1 | 1 | 10% | 10% |
10USD | 1 | 2 | 20% | 20% |
20USD | 2 | 4 | 20% | 40% |
40USD | 2 | 8 | 30% | 60% |
80USD | 4 | 16 | 22.5% | 90% |
160USD | 8 | 32 | 17% | 136% |
CPUが複数コアある場合に、CPU使用率の上限を100%×コア数(200%や400%)と表示するようなソフトウェアを用いて監視している場合は、仮想コア単位の値を確認してください(具体的には、Mackerelが該当します)。
ここに記載したCPU使用率を超えていたとしても、直ちに影響が出るわけではありません。また、一時的に目安を超えたとしても、多くの場合問題は生じません。しかし、CPU使用率が目安値を超えた状態が長く続いていると、強制的に上記の目安値までCPU使用率を制限されてしまいます。
上位プランでは、プランを上げると目安が下がるように見えますが、仮想コア数が増えているので実際には性能自体は上がっています(費用対効果は悪いですが)。
私のアプリケーション、常にCPU使うんだけど……
その場合、Lightsail自体が向いていません。EC2にて、M5やC5のように常に性能が確保できるインスタンスを使用してください。ただし、EC2は転送量をはじめ、さまざまな要素が従量課金となっておりますのでご注意ください。
あるいは、他社のVPSや専用サーバーを使用することをお勧めします。