はじめに
Swapメモリがずっと100%で張り付いてるよ監視エラーが発生した場合、どうすべきなのか悩み調べた結果をまとめておきます。前提としてサーバはCentOSです。
Swapメモリとは
Linux に於ける Swap 領域 は、物理メモリー (RAM) の容量が満杯になった時点で使用されます。システムが更なるメモリーリソースを必要として、 RAM が満杯である場合、メモリー内の活動していないページが swap 領域に移動されます。
RedHatTraning
swapを使うとディスクアクセスが発生するから遅いとかありますが、そのあたりは用途によって違うので一概にはいえないかなぁと思います。あとは今どきSSD標準になってきてるのでそこまで遅くはないのではないかと。
メモリが2GB以下の場合はメモリの2倍。
2GB以上の場合はメモリ+2GBととありますが今どきどうなんでしょうか。
ハイバネーションとは
シャットダウンする際にメモリをディスクに退避して次回起動した際に、メモリを復元する仕組みのことです。
macにはデフォルトで入ってて便利なあれですね。
RedHatの推奨
システムの RAM の容量 | 推奨 swap 領域 | ハイバネートを許可する場合の推奨 swap 領域 |
---|---|---|
2GB 以下の RAM | RAM 容量の 2 倍 | RAM 容量の 3 倍 |
2GB から 8GB の RAM | RAM 容量と同じ | RAM 容量の 2 倍 |
8GB から 64GB の RAM | 最低 4GB | RAM 容量の 1.5 倍 |
64GB 以上の RAM | 最低 4GB | ハイバネートは推奨しません |
ずっと100%張り付いてるけど大丈夫か?
推奨をみたしているとして、それでも100%になっているけど大丈夫か?についての判断ポイントですが、ハイバネートを使っていないのであれば大きな問題はないと思われます。ただし、リアルタイムにswapのin/outが多発する場合はリソース不足している可能性があります。
・メモリが不足しているように見えても、キャッシュが非常に有効に働いて良好な運用状態の場合がある。
makoto_fujimotoのblog
・ Swapメモリの総量値にはほとんど意味はない。
・問題視すべきはリアルタイムのI/O発生で、これが発生している場合は致命的なリソース不足となっていることが断言できる。
リアルタイムのI/Oはvmstatコマンドで確認できます。
vmstat [オプション] [更新の間隔 [回数]]
$ vmstat 2
siがスワップIN、soがスワップOUTとなり、ここが常に大きく変動するようであれば設定やリソースの見直しをした方がよさそうです。
さいごに
CloudサービスでVMやベアメタルを借りる際にはデフォルト設定をみておいたほうがいいかもしれません。デフォルトだとけっこう少なめに設定されてたりするので。
ただ、DBやBIサーバなんかを自前で構築しない限りあまり発生しないとはおもいますが。。。