CS COMMUNICATION

メディア

ITエンジニア勉強会:Linuxのリソースをチェックする方法

  • LINEで送る
  • このエントリーをはてなブックマークに追加

はじめに

こんにちは、ロニーです。

 

「サーバのリソースどうなってる?」

 

と、聞かれたときに、すぐに確認して答えられますか?

 

今回は、例えばそんなシチュエーション、Linuxのサーバリソースを確認する方法をシェアします。

 

リソースと一言で言った場合、主な項目は、

・メモリ使用量、

・ディスク使用量

・CPU使用率(load average)

になります。

 

「空きメモリが不足してメモリリークを起こした」

「ディスクが逼迫してしまいコマンドが打てなくなってしまった」

「CPU使用率が高すぎて処理が固まってしまった」

などなど、よくある話ですが、実際に起きたら大変なインシデントです。

 

上記のリソースを確認する方法はきっちり押さえておきたいところです。

では、いってみましょう。

 

メモリ使用量を確認する「free」コマンド

メモリのトータルサイズ、使用量、空き容量、SWAPメモリの使用率などを確認できます。

行には「Mem」と「Swap」があります。

Memはサーバの通常のメモリです。

Swapはスワップメモリ、すなわちHDD側から一時的にメモリ領域として割り当てられているエリアです。

 

縦の列には左から順に「total」「used」「free」「shared」「buff/cache」「available」があります。

それぞれの意味は以下の通りです。

 

total:

サーバ搭載の総メモリ容量。物理メモリサイズと捉えてよいです。

used:

カーネルやアプリケーションなどが押さえているメモリサイズです。実際に使っている量に加えて、「今は使ってないけどすぐ使えるようにアプリごとに割り当てられていて実質使えないメモリ」も含まれます。

free:

単純な空き容量です。

shared:

共有メモリサイズです。メモリをファイルシステムのように扱い、アプリ間で共有できる状態になっているメモリサイズです。

buff/cache:バッファ/キャッシュの意味で、カーネルやアプリ等がバッファとして備えておくメモリサイズと、ページキャッシュのように一度読み込んだ情報を再利用できるように一時的に保存しているメモリサイズの合計が表されます。cacheはdrop_cacheへのechoコマンドによって解放することができますが、buffは解放できません。

available:

その名の通り、実質使用可能な空きメモリサイズで、freeとcacheを足したサイズになります。

 

freeコマンドは打ったその瞬間のメモリの状況を表示するわけですが、

サーバが動いている場合total以外のメモリサイズは常に変動することは意識しておく必要があります。

 

freeコマンドのオプションには、

人間が見てわかりやすい単位に直して表示してくれる「-h」、

buffとcacheの内訳を表示してくれる「-w」、

1秒おきに連続表示してくれる「-c <回数>」、

指定時間ごとに連続表示してくれる「-s <秒数>」

 

等があります。

cオプションとsオプションを同時に使って、

「free -s 10 -c 6」とすれば、10秒おきに6回分のメモリを取得できるので便利です。

 

swapメモリを空けたいときにはswapoff、swaponコマンドを使用することでswapメモリの解放ができますが、swapメモリを使ってしまっている根本原因を解決しないことにはswapon後に再度swapメモリを使用し始めるので、これらのコマンドによる解放は一時的な対処と捉えるべきです。

swapメモリはあくまで非常用として使うべき領域です。

ディスク使用量を確認する「df」コマンド

「df」コマンドによってディスクの使用量を確認できます。

Disk Freeが由来とされています。マウントしているファイルシステムごとに表示されるので、外部保存領域があれば表示されます。

 

一般的なサーバの仕様であれば、「/」にアプリケーションが乗っかっているため、

「/」にマウントしているファイルシステムの使用量は使用率を確認する形になるでしょう。

どこまでの使用率を許容するかは運用次第になりますが、健全な稼働を維持するのであれば60%以下に押さえておきたいところです。

 

オプションには、

freeと同じく、人間に分かりやすい単位表示で表示する「-h」、

inode情報を表示する「-i」

がよく使うところかと思います。

CPUリソースなどを確認する「top」コマンド

CPU使用率を確認するのであればまず上がるのが「top」コマンドになります。

このコマンドによってload average、つまり今CPU1個当たりどれくらいのタスクが待っているかが確認できます。

load average(ロードアベレージ)とは、システムの負荷状況の指標です。

「CPUの実行権限付与待ちプロセス」と「ディスクI/Oの完了待ちプロセス」が一定期間内にどれだけあるかを示すもので、左から1分以内、5分以内、15分以内のプロセス数が表示されます。

 

単順にload averageのみを確認するのであれば、OS起動してからの経過時間を確認するuptimeコマンドでも確認ができますが、topコマンドはリアルタイム、そしてより詳細に確認することができるのが強みです。

 

topコマンドは表示モードが切り替わり、top用のリアルタイム表示モードが表示されます。

稼働しているプロセスがCPU使用率順で、3秒間隔で更新されて表示されます。

この表示モードから抜ける場合はqキーまたはctrl+cを押してください。

 

 

最上段load averageを含むuptimeの結果が表示され、2段目にCPUがさばいているタスクの数、3~4段目ではメモリ情報まで表示されます。

 

具体的なプロセスごとのリソースは6行目以下です。

表示している状態で、

shift+mでメモリ順に、

shift+tで実行時間順に、

shift+pでCPU使用率順にソートできるので便利です。

 

オプションには、モードを切り替えずバッチモードとして結果だけを出力させるのに便利な「-b」オプションや、リアルタイム更新頻度を変える「-d <秒数>」などがあります。

どちらかというとオプションを指定するよりも、

表示内で操作する方が多いコマンドですね。

 

画面を分割する、指定のプロセスにkillシグナルを送るなど、使いこなすと便利な機能が多くあります。

 

ただtopコマンドの注意点として、コマンドの実行自体がCPU負荷をわずかに上げる、という点があります。

あくまでコマンドなので、topコマンドによってパンクする状態では末期ですが、

CPU逼迫していてユーザ影響が出ているときにはむやみに使い続けないのも賢明です。

さっと確認する、バッチモードで出力するなど、負荷軽減を意識した使い方ができればベストです。

findコマンド、duコマンド、ファイル件数によってはcatコマンドであっても使い方によっては負荷を上げてしまったりするので、topコマンドに限らずではありますけどね。

おわりに

さて、いかがでしたでしょうか。

今回はサーバリソースを確認するコマンドを紹介しました。

これらのコマンドは、あくまで原因究明や状況把握用のものです。

 

実際にリソース逼迫状態を解決するには、

 

不要なファイルを削除する、

メモリを使いすぎているアプリケーションを一時的に止める、

ミドルウェアのメモリ割り当て量を調整する、

サーバを冗長化して負荷分散する、

ログローテーション周期を調整する、

メモリやディスクの増強、

などなど、具体的な対処が必要です。

 

さっと状況を把握して、必要なエビデンスを取得して、

適切な解決策を素早く取れる(提案できる)ようになれるとかっこいいですよね。

 

では、今回は以上です。

  • LINEで送る
  • このエントリーをはてなブックマークに追加