Linux | topコマンドでCPU消費の原因を特定する

Linuxを勉強したい人向け

こんにちは。

普段はIT業界についてのブログを執筆してるエンジニアです。
» 参考:プログラマーの年収は200万円以下です【IT業界の残酷な成功法則】

今回は、Linuxのtopコマンドについての解説記事です。

LinuxのtopコマンドでCPU使用率が高い原因を調査したい人

LinuxのtopコマンドでCPU使用率が高い原因を調査したい人
「Linuxのtopコマンドを使って、CPU使用率が高くなっている原因を究明したいです。原因の究明までの具体的な手順やtopコマンドの見方を教え下さい。また、しばらくの間サーバに仕掛けておきたい場合にはどうしたらいいでしょうか?」

こんな悩みを解決します。

この記事を書いている私はIT業界歴12年、うちサーバエンジニア歴6年、年収1,000万円ちょっとの金融系エンジニアです。IRIXやSolarisなどのUnixやmac、Linuxなど様々なUNIX系環境を扱ってきました。

これまでの経験を踏まえ、コマンドの解説に留まらず実務視点で利用方法を記事にしました。お役にたちましたら幸いです。

本記事の内容

1. 【基本】Linuxのtopコマンドとは

Linuxのtopコマンドとは、Windowsのタスクマネージャのように現在稼働しているプロセスがどのようなリソースをどのくらい消費しているか定量的に確認できるコマンドです。使い方は簡単で、単にtopと打つだけ。どのユーザでも実行できる便利なコマンドです。

top

実行結果はこのような感じに、リアルタイム(1秒間隔)でCPU使用率の高い順に起動中のプロセスが表示されます。
Linuxでのtopコマンド実行例

2. 【実践】高負荷状態のプロセスを特定する

topコマンドでCPU使用率をチェックする
まずは上記のようにtopコマンドを実行し、しばらく全体の動きを眺めましょう。CPUという列に注目します。するとプロセスごとの負荷のパターンが見えてくると思います。

  • パターン1:常にCPU使用率が高いプロセス
  • パターン2:瞬間的にCPU使用率が高くなるプロセス

まず疑うべきは、パターン1のCPU使用率が常に高いプロセスです。不要なプロセスまたは想定外のプロセス負荷が高い場合、このプロセスが悪さをしている可能性大です。

次にパターン2のように定期的にCPU使用率が高くなるプロセスを確認します。プロセスが内部的にインターバルを持ち処理を行う結果、定期的にCPU使用率が高くなります。対象のプロセスに応じて、チューニングの可否を検討します。

パターン1にもパターン2にも該当しない場合は、topコマンド結果のうちTIMEに注目します。これは、CPU時間といって、プロセスがどれくらいの時間CPUリソースを使ってきたかが判ります。つまり今のCPU使用率が高くなくても、過去のある段階でCPUを多く使っていたプロセスならば、TIMEの値が非常に大きくなります。

3. 【応用】サーバ運用にtopコマンドの実行を組み込む

サーバ運用にtopコマンドの実行を組み込む

topコマンドはリアルタイムにプロセスの稼働状態・負荷の状態を確認するコマンドですが、リアルタイムではなくログ出力して後から確認することもできます。

例えば深夜だけに稼働するプロセスの状態を確認したり、不定期にCPU負荷が跳ね上がるような事象が発生した場合、ログ出力するのが有効です。

topのバッチモード

topのバッチモードを使えば、topコマンドの結果をログ出力することができます。しばらくの間サーバにtopコマンドを仕込んでおきたい場合には、以下のように実行します。

top -b > 《ログファイル名》

これでtopの実行結果をファイル出力し、あとで結果をログで確認することができます。

なお、-bはバッチモードといい、出力結果をリアルタイムで確認するのとは異なり、後でログで結果を確認することを前提にフォーマットが最適化されます(macにはこのオプションはありません)。

また、運用に完全に組み込む場合にはJOBとして実装するか、cronに以下のコマンドを登録することができます。

crontab -e  ←cronを編集モードで開く
top -b -n 1 >> 《ログファイル名》  ←左記の行をcronに追記

これは、topコマンドの実行を継続的に行うのではなく、1回だけ情報を取得してプロセスが終了するオプションです。

cronで1分に1回実行するように設定すれば、1分間隔でtopの情報を定期的に取得するよう運用に組み込むことができます(macには-nオプションもありません)。

おわりに

今回は以上です。topコマンドを用いて負荷の高いプロセスを検出する方法について述べました。お役にたちますと幸いです。

Blog TOP  Linuxコマンドを勉強したい人向け|Linuxの使い方 記事まとめ

Linux&Linuxコマンドを勉強したい人向けの記事もくじ

用語解説・技術一般

  "UNIXとLINUX"の違いについて解説します
  CUIとGUIの違い・特徴について解説します

サーバリソースを確認するコマンドの使い方

  【Linux】CPU使用率を確認する3つの方法を解説します
  【Linux】topコマンドで,CPU消費の原因を特定する方法
  【Linux】ps実行時に-efオプションを付ける理由について
  【Linux】メモリ使用率を確認する|容量・空きの確認も
  【Linux】ディスク容量を確認する|ディスク容量監視も

ファイル操作に関するコマンドの使い方

  【Linux】ファイルの行数をカウントする方法を解説
  【Linux】文字コード変換ならiconvコマンド1択です
  【Linux】/dev/nullを、エンジニアが使う2つの目的
  【Linux】findのexecオプションの使い方とその注意点
  【Linux】findの結果から圧縮ファイルを作るコマンド
  【Linux】hostsの場所はどこ?→/etc/hostsにあります
  【Linux】touchコマンドで,時刻更新&空ファイル作成

Linux管理者用コマンドの使い方

  【Linux】再起動コマンド(shutdown)の使い方と注意点

よく使う便利なコマンドの使い方

  【Linux】改行なしでechoコマンドを使う時の -nオプション
  【Linux】sleepコマンドの使用例と注意点について解説する
  【Linux】rmコマンドでディレクトリを削除する方法を解説
  【Linux】ファイルを削除するコマンド2選【rm以外もあり】
  【Linux】awkの区切り文字を指定する,-Fオプションを解説
  【Linux】sedで文字列の置換をするeオプションを解説する
  【Linux】dateコマンドのフォーマットとその便利な使い方
  【Linux】大文字から小文字に変換する方法【小文字から大文字も】

シェルの便利機能

  【Linux】コマンド履歴を検索する【Ctrl+r】