「Linux」デスクトップの動作が遅くなることはめったにない。しかし、絶対に起きないと言えば、うそになる。システムの速度が低下しても、ほとんどの場合、筆者は問題を引き起こしている特定のアプリケーションを突き止めることができる(「VirtualBox」が原因であることが多い)。ただし、ハードドライブのボトルネックに起因する問題を経験したこともある。
本記事では、いくつかのコマンドを使用して、ハードウェア関連のボトルネックを特定する方法を紹介する。
1. iostat
このコマンドは、デバイスとパーティションの両方について、CPUとI/O(入出力)の統計情報を報告する。iostatを使用すると、デバイスがアクティブな時間を平均転送速度と比較して監視することで、デバイスの負荷を監視できる。このコマンドが生成するレポートは、システムを設定して、最適なパフォーマンスを引き出したいときに役立つ。iostatには、重視すべき3つの項目がある。
- %util:ディスクがリクエストを処理していてビジー状態にあった時間。この数値が80%を超えている場合は、ボトルネックが発生している可能性が高い
- await:I/Oリクエストが完了するまでの平均時間。この値が高い場合、ディスク速度が遅すぎるか、何らかの問題が発生している
- svctm:I/Oリクエストの平均サービス時間。この値が高い場合は、ディスクの応答に時間がかかりすぎている
注意点が1つある。iostatはすべてのデバイス(ループバックも含む)を表示する。ほとんどの場合、注意すべきなのは、nvme、sdX(Xは文字)、zramといったタイプのデバイスだ。
iostatは、デフォルトではシステムにインストールされていない可能性がある。インストールされていない場合は、以下のようなコマンドで「sysstat」アプリケーションをインストール可能だ。
- 「Ubuntu」ベースのディストリビューション:sudo apt-get install sysstat -y
- 「Fedora」ベースのディストリビューション:sudo dnf install sysstat -y
2. iotop
iotopコマンドはiostatに似ているが、静的なレポートではなく、リアルタイムのレポートを生成する。iotopはtopコマンドに似ているが、topがソフトウェアとサービスに関する統計情報を表示するのに対し、iotopはプロセスとディスクアクティビティーを表示する。過剰なシステムリソースを使用しているプロセスがある場合、そのプロセスが問題を引き起こしている可能性が高い。
iotopアプリケーションは、sudo権限で実行する必要がある。実行すると、「TID」(スレッドID)、「PRIO」(プロセス優先度)、「User」(ユーザー)、「Disk Read」(ディスク読み取り速度)、「Disk Write」(ディスク書き込み速度)、「SwapIn」(スワップイン)、「IO Priority」(IO優先度)、「Command」(コマンド)の列が表示される。確認すべき最も重要な3つの情報は、「Disk Read」「Disk Write」「IO Priority」だ。「Disk Read」や「Disk Write」の値が高いプロセスがある場合は、それが問題の原因である。多くのI/Oリソースを使用しているプロセスがある場合は(「IO Priority」)、ioniceコマンドを使用して(プロセスのI/Oスケジューリングクラスと優先度を設定または取得するため)、そのプロセスの優先度を調整した方がいいだろう。
UbuntuまたはFedoraベースのディストリビューションにiotopをインストールするには、以下のコマンドを使用する。
sudo apt-get install iotop -y sudo dnf install iotop -y
3. dstat
dstatもシステムリソース(特にディスクI/O)の使用状況を監視するためのコマンドだ。iostatと同じくらい詳細な情報を、iotopのようにリアルタイムに報告するという点で、dstatはiotopとiostatを組み合わせたようなコマンドである。確認すべき最も重要な情報は、「Disk Read/Write」(ディスク読み取り/書き込み)(一貫して大量のアクティビティーがある場合は、それが問題の原因かもしれない)と「Disk Await」(ディスクの待ち時間:個々のI/O操作が完了するまでの時間。数値が高い場合は、ボトルネックが発生している)だ。
UbuntuまたはFedoraベースのディストリビューションにdstatをインストールするには、以下のコマンドを使用する。
sudo apt-get install dstat -y sudo dnf install dstat -y
オプションを使用して、dstatが表示する情報を絞り込むと便利だ。例えば、CPUの統計情報だけを表示させたい場合は、以下のコマンドを実行する。
dstat -c
ディスクの統計情報だけを表示させたい場合は、以下のコマンドを実行する。
dstat -d
4. sar
sarコマンドもsysstatと一緒にインストールされ、システムアクティビティーに関する情報を収集、レポート、保存する。sarコマンドは、オプションを使用する必要があるため、これまでに紹介したコマンドよりも少し複雑だ。例えば、ポーリング間隔が2秒のCPU統計情報を3つ表示させたい場合、コマンドは以下のようになる。
sar -u 2 3
上記のコマンドは、CPU統計情報を3つ表示した後、平均を示す4つ目の統計情報を表示する。出力には以下のものが含まれる。
- CPU:テスト対象のCPUコアの番号(デフォルトでは、すべてのコアが対象になる)
- %User:アプリケーションがユーザーレベルで実行されている時間の割合
- %Nice:アプリケーションがユーザーレベルでnice優先度で実行されている時間の割合
- %system:システムレベルのプロセスの実行にかかる時間の割合
- %iowait:未処理のディスクI/Oリクエストがある状態で、CPUがアイドル状態になっていた時間の割合
- %steal:ホストが別の仮想マシン(VM)にサービスを提供しているせいで、仮想CPUがアイドル状態になっていた時間の割合
- %idle:未処理のI/Oリクエストがない状態で、CPUがアイドル状態になっていた時間の割合
特定のコアに問題があると思われる場合は、以下のように番号を指定してテストできる。
sar -P 1 2 3
-Pオプションの後に、テストしたいコアの番号を指定する。
5. smartctl
ハードドライブの状態を確認したい場合は、smartctlコマンドを使用するといいだろう。smartctlのレポートには、特に注意すべき2つの情報がある。
- Reallocated_Sector_Ct:エラーが原因で再割り当てされたセクターの数。この数値が高い場合、ドライブが故障している可能性がある
- Seek_Error_Rate:この値が高い場合、ドライブが特定の情報を見つけるのに苦労している可能性があり、損傷の疑いがある
Linuxシステムのボトルネックの原因特定に役立つ5つのコマンドの紹介は、以上である。manコマンド(man smartctl、man sar、man dstat、man iotop、man iostat)を実行して、それぞれのコマンドの詳細を必ず確認してほしい。
提供:buzbuzzer/Getty Images
この記事は海外Ziff Davis発の記事を朝日インタラクティブが日本向けに編集したものです。