VPSが重い…。stealとiowaitが激増していることがあります。

最終更新日

数日前、アクセスログを見ようとWordPressの管理画面に入ろうと思ったところ、表示されるまでに数分かかり、SSHで接続するにも数十秒かかるような状況が発生していました。この状態では外部公開しているサイトも間違いなく応答に時間がかかり、表示前に離脱されたアクセスもあると思います。

当サーバはCPUの使用状況などを報告するツールを入れており、別サーバからその機能に接続してグラフに可視化し定期的に監視をしております。そのグラフを見てみるとかなりVPSが重たい状況になっていましたので、特に参考になることもないかとは思いますが記事にしてみました。

VPSが重くなる原因としては、自分の割当以上のリソースを使おうとしているか、同居人(同じホストサーバ上の他の利用者)による大量のリソース使用または利用者の過収容といったことがあげられます。
自分に与えられたスペック以上の利用に関してはプラン変更やCDNの導入で対応できますが、後者2つの場合はもはやどうしようもありません。今回は間違いなく後者のパターンです。

リソース監視グラフを確認します

CPU使用率のグラフを下に示します。

本日が12月17日の金曜日でして、1枚目のグラフは月曜日(13日)~本日(17日)夜まででの統計、2枚目のグラフは昨日の日付が変わる頃から夜までの拡大版になります。

このグラフで着目すべきは上部の赤と紫の部分です。CPU使用率のうち、赤がstealを、紫がiowaitを表します。
stealとiowaitとは一体なんなのかというと、厳密には間違った説明になるかとは思いますが簡単にいうと次のような理解で問題ないと思います。
・steal
仮想環境においてゲストが要求したCPUのリソースに対してハイパーバイザが与えなかったCPU時間。
・iowait
IO待ちによりCPUが使用されなかった時間。IOの負荷を表しているかというとそうでもなく、CPU使用率が大きいときIO負荷が発生してもあまり上がる値ではありません。(私も厳密な意味ではよくわかっていません…)

stealが高い時点で基本的には同居人がCPU時間を占有しているとみて問題ないと思います。
iowaitが高い理由も単純に負荷問題で片付ける事はできませんが、少なくともIOが色々とボトルネックになっているのも間違い無いと判断していいと思います。
ちなみにグラフ中の白い部分はデータの欠落を意味します。サーバの負荷が高すぎたか、応答が得られなかったなどした場合に発生します。

ここで、ディスクの状況を見てみましょう。

表示している時間の範囲は先程と同様です。時間指定するとどういうわけが秒数が指数表示になって見にくいです…。本日分でも10秒超えが普通にあり、木曜日には100秒超えも発生しています。このサイトが動いているVPSがSSDを採用しているので、これははっきり言って異常値と言えます。これ以上はグラフをアップロードはしませんが、当サーバが発生させているディスク負荷も至って普通というか、普通以下なくらいですので明らかに他の利用者の影響を受けています。

こういうときはしばらく待って負荷を発生させている同居人が強制停止されるのを待つか、再起動で収容先が変わるVPSの場合はコントロールパネルを操作するくらいしか方法がありません。こればかりはVPSとはいえ所詮は共有サーバーの宿命です。
そのようなデメリットを理解していたとしても、読み込み速度が落ちるのはサイト運営者にとっては致命的です。nginxのfastcgiとtmpfsで云々みたいな情報を何度か見たことがあるのでいつか挑戦してみたいですね。

言いたいこと

VPSは通常、CPUなどがオーバーコミットされている共有環境です。周りの人のことを考えて使いましょう。
定期的にサーバのリソース使用状況を監視して、異常な負荷が発生していないか確かめることも推奨します。
一応書いておきますが、空きリソースで採掘なんてもはや論外です。

余談ですがかつては下記VultrのVPS(High Frequency)で当サイトを動かしていました。当該プランはその名の通りCPU、SSDがかなり高速な印象があります。バナーから登録で100ドル分のクレジットが付与されますのでよろしければお試しください。

参考

I/O負荷の正確な状況はiowaitでは分かりません – Qiita
LinuxのCPU使用率の%stealについて – Qiita

・2022/1/16 誤字・不自然な日本語表現を修正しました。

シェアする