1 システムのモニタリングとパフォーマンスの最適化

パフォーマンスの問題は、ソフトウェアやハードウェアなどのいくつかのシステム・コンポーネントや、関連する相互作用によって発生する可能性があります。Oracle Linuxでは、多数のパフォーマンス診断ユーティリティが使用可能で、その中には、様々なハードウェア・コンポーネントのリソース使用率を監視および分析するツールや、いくつかのプロセスや関連スレッドでパフォーマンスの問題を診断するためのトレース・ツールなどがあります。

多くのパフォーマンスの問題は、構成エラーの結果です。これらのエラーは、有効なソフトウェア、ハードウェア、ストレージ、ドライバおよびネットワークのコンポーネントについて事前にテストした検証済の構成を使用することで回避できます。検証済の構成では、Oracle Linuxデプロイメントのベスト・プラクティスが取り込まれ、スタック全体の実際のテストが実施されています。オラクル社では、多くの検証済の構成を公開しており、ダウンロードできます。カーネル・パラメータ設定に関する追加の推奨事項については、実行中のリリースのリリース・ノートを参照してください。

システムのパフォーマンスおよび監視のユーティリティ

システム・リソースの使用状況とエラーに関する情報を収集でき、過負荷のディスク、ネットワーク、メモリーまたはCPUが原因のパフォーマンスの問題を特定するために役立つ、様々なOracle Linuxユーティリティが使用可能です。

システムのパフォーマンスおよび監視のユーティリティについては、デフォルトで次のパッケージがインストールされます。それらがまだない場合は、必要に応じてパッケージをインストールできます。

  • util-linuxではdmesgが提供されます。これを使用して、カーネル・リング・バッファの内容を表示します。これには、システム・リソースの使用状況に関するエラーが含まれている可能性があります。
  • procps-ngでは次のユーティリティが提供されます。
    • free: システム内の空きメモリーおよび使用済メモリーの量を表示します。
    • top: システムで実行中のタスクについて、動的なリアルタイムのビューを提供します。
    • uptime: 過去1分間、5分間および15分間のシステム・ロード平均を表示します。
    • vmstat: 仮想メモリー統計をレポートします。
  • iprouteでは次のユーティリティが提供されます。
    • ip: ネットワーク・インタフェースの統計とエラーをレポートします。
    • ss: ネットワーク・インタフェースの統計をレポートします。

ヒント:

あるユーティリティがシステム内に存在するかどうか調べるには、そのユーティリティのパッケージがインストールされているかどうかを確認します。たとえば、dmesgユーティリティの場合は、次のように入力します。

dnf info util-linux
Installed Packages
Name         : util-linux
Version      : version-number
...

次のパッケージをインストールすると、その他のユーティリティを利用できます。

  • sysstatでは次のユーティリティが提供されます。
    • iostat: I/O統計をレポートします。
    • mpstat: プロセッサ関連の統計をレポートします。
    • sar: システム・アクティビティに関する情報をレポートします。
  • iotopでは、ディスクを監視しプロセスごとにI/Oを入れ替える、iotopが提供されます。
  • nfs-utilsでは、NFSマウントのI/O統計をレポートする、nfsiostatが提供されます

これらのユーティリティの多くは、オーバーラップ機能を提供します。詳細は、ユーティリティの個々のマニュアル・ページを参照してください。

これらのユーティリティの多くに関する実践的チュートリアルおよび関連ビデオ・コンテンツについては、Oracle Linuxでのシステム・リソースの監視を参照してください。

システム・リソースの使用状況の監視

システム・リソースに関する情報を収集することで、システム・パフォーマンスを監視できます。より適切に評価するためには、まず、標準的な操作条件で許容測定値のベースラインを確立します。メモリー不足やリソース使用率のスパイクなどの問題発生時にそれらの識別が容易になるように、そのベースラインを基準点として使用できます。また、パフォーマンス・モニタリングを使用して、将来的な拡大を計画することも、構成の変更が将来のパフォーマンスに与える影響を判断することもできます。

システム内のリソースの使用状況を監視する方法の詳細は、OSWatcher Black Boxの使用およびPerformance Co-Pilotの使用も参照してください。

使用状況のリアルタイムでの監視

設定した秒数ごとにリアルタイムでモニタリング・コマンドを実行し、出力の変化を監視するには、watchコマンドを使用します。たとえば、次のコマンドを使用して、mpstatコマンドを1秒ごとに実行できます。

sudo watch -n 1 mpstat

このコマンドでは、出力内容が単一行として生成され、1秒ごとにその情報が変化します。次に例を示します。

hh:mm:ss  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
hh:mm:ss  all    1.44    0.02    0.80    0.01    0.07    0.05    0.06    0.00    0.00   97.56

また、多くのコマンドでサンプリング間隔を秒数で指定できます。次に例を示します。

sudo mpstat 1

このコマンドでは、前述のコマンドと同じ情報が表示されますが、情報が連続的に一覧表示されていき、1秒ごとに新しい行が生成されるという点が異なります。

hh:mm:ss  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
hh:mm:ss  all    0.00    0.00    0.00    0.00    0.50    0.50    0.00    0.00    0.00   99.01
hh:mm:ss  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
...

リアルタイム監視を停止するには、[Ctrl]を押しながら[C]を押します。

ログによる使用状況の監視

sarユーティリティでは、システムの実行中は10分ごとに統計が記録され、その情報は当月の日ごとに保持されます。その情報は/var/log/sa/saDDに格納されます。

当月の特定の日のsarログの内容を表示するには、次のように入力します。

sudo sar -A -f /var/log/sa/saDD               

sarコマンドを使用して、監視する必要がある特定の情報について記録を含む、カスタマイズしたログを作成することもできます。次の構文を使用します。

sudo sar -o datafile seconds count >/dev/null 2>&1 &

前述のコマンドでは、datafileは情報を格納する必要があるカスタマイズしたログへのフルパスであり、countは記録するサンプルの数を表しています。このコマンドを使用すると、sarプロセスがバックグラウンドで実行され、データが収集されます。

この監視の結果を表示するには、次のように入力します。

sudo sar -A -f datafile

CPU使用率の監視

すべてのCPUコアがシステム・プロセスの実行で占有されると、その他のプロセスは、CPUコアが解放されるか、そのコードを実行するようにスケジューラがCPUコアを切り替えるまで待機する必要があります。あまりに頻繁に多数のプロセスがキューに入れられると、システムのパフォーマンスのボトルネックになる可能性があります。

CPU使用率を監視するためのコマンドのいくつかを次に示します。これらのコマンドで使用できる様々なオプションおよび引数については、それぞれのマニュアル・ページを参照してください。

  • uptime
  • mpstat
  • sar
  • top

次の例では、これらのコマンドを使用してシステムのメモリー使用率に関する統計を取得する方法を示します。

  • CPUコアごとのCPU使用率統計を確認し、すべてのCPUコアにわたるそのデータの平均を示します。

    • mpstat -P ALL
      05:10:01 PM  CPU    %usr   %nice    %sys   %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
      05:10:01 PM  all    0.76    0.02    0.70      0.02    0.08    0.05    0.06    0.00    0.00   98.32
      05:10:01 PM    0    0.75    0.01    0.68      0.00    0.09    0.03    0.07    0.00    0.00   98.37
      05:10:01 PM    1    0.76    0.03    0.72      0.03    0.06    0.06    0.06    0.00    0.00   98.27
      
    • sar -u -P ALL
      03:00:01 PM  CPU  %user   %nice   %system   %iowait  %steal   %idle
      03:10:01 PM  all  8.30    0.00    2.20      0.22     0.10     89.18
      03:10:01 PM    0  8.22    0.00    2.64      0.31     0.09     88.74
      03:10:01 PM    1  8.39    0.00    1.77      0.13     0.10     89.61
      ...

    これらのコマンドの出力には、%idle見出しの下に、CPUでシステム・コードまたはプロセス・コードが実行されていない時間の割合を示すデータが含まれています。この割合が、すべてのCPUコアにおいてほぼ常に0%に近い場合は、システムで、実行中のワークロードに対するCPUバウンドが発生しています。

    %systemまたは%sys見出しの下に示されるシステム・コードの実行時間の割合は、(%idleが0%に近い場合は特に)、30%を超えないようにすることをお薦めします。

  • システム・ロード平均に関する情報を確認します。

    • uptime
      21:25:34 up  6:28,  1 user,  load average: 0.02, 0.10, 0.04
    • sar -q
      14:57:55     LINUX RESTART	(2 CPU)
      
      03:00:01 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
      03:10:01 PM         0       214      0.19      0.30      0.22         0
      03:20:01 PM         0       212      0.00      0.05      0.10         0
      ...
      Average:      runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
      Average:            1       212      0.12      0.08      0.05         0

    システム・ロード平均は、CPUコアにおいて実行中、実行待機中、およびディスクI/Oアクティビティの完了待機中のプロセスの数の組合せからなり、その後に、それらすべてについて、一定期間にわたる平均が示されます。

    uptimeコマンドでは情報が1行で示されますが、sar構文では、ldavg-*見出しの下の複数の列で情報が示されます。また、sar構文では、実行待機中のプロセスの数、およびプロセスの合計数も示されます。それらは、runq-sz見出しとplist_sz見出しの下に示されます。

    ビジー・システムでは、通常は、ロード平均が5分間または15分間にわたりCPUコア数の2倍を超えないようにすることをお薦めします。長期にわたりロード平均がCPUコア数の4倍を超えている場合、システムは過負荷になっています。

    システム・ロードをより適切に評価するには、ユーザーとアプリケーションにシステム応答性に関する問題が発生しないような標準の負荷におけるシステムの平均負荷を求めます。その後、このベンチマークからの偏差を一定期間調べます。ロード平均の大幅な上昇は、重大なパフォーマンスの問題を示す場合があります。

  • CPUアクティビティのリアルタイム・リストを確認します。

    top
    top - 22:13:34 up  7:16,  1 user,  load average: 0.00, 0.02, 0.01
    Tasks: 149 total,   1 running, 148 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.2 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.2 hi,  0.0 si,  0.0 st
    MiB Mem :  14705.5 total,  11738.9 free,    753.2 used,   2213.4 buff/cache
    MiB Swap:   4096.0 total,   4096.0 free,      0.0 used.  13588.9 avail Mem 
    
        PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                     
      34781 root      20   0   11384   7100   1700 S   1.0   0.0   0:00.03 pidstat                     
       2014 root      20   0   26216   3568   3056 S   0.7   0.0   0:04.78 OSWatcher                   
       1481 root      20   0  202628  38328  36792 S   0.3   0.3   0:02.94 sssd_nss
       ...

    デフォルトで、topでは、システム上の最もCPU集中型のプロセスがリストされます。その出力の上部のセクションには、過去1分間、5分間および15分間のロード平均、実行中およびスリープ中のプロセスまたはタスクの数、合計CPU使用率とメモリー使用量などの一般情報が表示されます。

    2番目の表には、プロセスID番号(PID)、プロセス所有者、CPU使用率、メモリー使用量、実行時間、コマンド名など、プロセスのリストが表示されます。デフォルトで、リストはCPU使用率でソートされ、CPUの上位コンシューマが最初にリストされます。

    topプロセスを停止するには、[Ctrl]を押しながら[C]を押します。

すべてのコマンドを一緒に使用することで、システムのCPU使用率を把握できます。たとえば、ロード平均または実行キュー・サイズが大きく%idleの割合が低い状態が続いている場合は、システムのCPU容量がワークロードに対してが不十分であることを示している可能性があります。CPU使用率が高いときは、topコマンドにより、どのプロセスが原因である可能性があるかを特定できます。

メモリー使用量の監視

メモリー使用量を監視するための役立つユーティリティを次に示します。

sarコマンドによるメモリー使用量の監視

メモリー使用量を監視するには、入手する必要がある情報に応じて、使用可能なオプションを指定して、sarコマンドを実行します。オプションのリストを表示するには、sar --helpと入力します。

  • sar -r: メモリー使用量の統計がレポートされます(空き(kbmemfree)、使用可能(kbavail)、および使用済(kbmemused)メモリーなど)。このレポートには、使用中の物理メモリーの割合である%memusedも含まれています。
  • sar -B: メモリーのページングの統計がレポートされます(ページ・イン(pgpgin/s)とページ・アウト(pgpgout/s)、ページ・フォルト、メジャー・フォルトなど)。このレポートには、1秒ごとにkswapdデーモンによってスキャンされるメモリー・ページの数であるpgscank/s、および1秒ごとに直接スキャンされるメモリー・ページの数であるpgscand/sも含まれています。
  • sar -W: スワッピングの統計がレポートされます(1秒ごとにスワップ・インおよびスワップ・アウトされるページの数であるpswpin/spswpout/sなど)。

%memusedが100%に近く、スキャン率が毎秒200ページを継続的に超えている場合、システムはメモリー不足です。

システムで実メモリーまたは物理メモリーが不足し、スワップ領域の使用が開始されると、システムのパフォーマンスは大幅に低下します。スワップ領域が不足した場合は、一部のプログラムまたはOS全体さえも正しく機能しない可能性があります。freeまたはtopコマンドで、使用可能なスワップ領域がわずかであることが示された場合は、システムのメモリーが残り少なくなっています。

dmesgコマンドからの出力には、ブート時に検出された、物理メモリーに関する問題の通知が含まれている場合があります。

適応型メモリー管理デーモンの使用

メモリー使用量を管理するには、適応型メモリー管理デーモンを使用します。このデーモンは、UEK R6以降で提供されています。このデーモンは、Oracle Linuxシステム上の空きメモリーを監視し、メモリーの断片化と使用量を予測するユーザー領域サービスです。また、システム・メモリーが断片化されすぎたり、容量が一杯になるリスクがある場合は、自動的にメモリーを再利用することもできます。

システム・メモリーが高度に断片化された場合、adaptivemmdはカーネルをトリガーしてメモリーを圧縮し、断片化された領域を再配置する前に再利用できるようにします。システムが使用可能なメモリーを使い果たす可能性がある場合は、ウォーターマークが調整され、カーネルにメモリー内の新しいページを解放させることがあります。適応型メモリー管理は、Unbreakable Enterprise Kernelリリース6以降で使用できます。

このユーティリティを使用するには、次のことを実行します。

  1. adaptivemmパッケージをインストールします。
    sudo dnf install -y adaptivemm
  2. このデーモン・サービスを開始します。
    sudo systemctl enable --now adaptivemmd

adaptivemmdコマンドで使用できる様々なオプションを表示するには、次のように入力します。

sudo adaptivemmd -h

構成オプションは、/etc/sysconfig/adaptivemmdで変更できます。

詳細は、adaptivemmd(8)マニュアル・ページを参照してください。

 ブロックI/O使用量の監視

iostatコマンドでは、デバイスがアクティブである時間を平均データ転送速度と比較して監視することによって、ブロックI/Oデバイスの負荷が監視されます。この情報を使用すると、ディスクおよびホスト・アダプタ全体でI/O負荷を平均化するようにシステム構成を調整できます。このコマンドの出力例を次に示します。

iostat
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.69    0.05    0.77    0.00    0.03   98.46

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.05         2.32        25.19     611410    6640659
dm-0              0.62         2.07        20.22     545716    5329660
dm-1              0.70         0.02         4.97       4632    1308788

iostat -xでは、デバイスに対するI/Oリクエストの処理に費やしたCPU時間の割合である%util、そのデバイスに対して発行されたI/Oリクエストの平均キューの長さであるavgqu-szなど、ブロックI/Oアクティビティに関する拡張統計が1秒間隔でレポートされます。%utilが100%に近い、またはavgqu-szが1より大きい場合は、デバイス飽和が発生しています。

sar -dコマンドを使用して、%utilavgqu-szの値など、ブロックI/Oアクティビティに関してレポートすることもできます。

iotopユーティリティは、過剰なディスクI/Oの原因であるプロセスを特定するのに役立ちます。iotopのユーザー・インタフェースはtopに似ています。その上部のセクションに、iotopでは、1秒当たりのディスク入出力使用量の合計がバイト数で表示されます。その下部のセクションに、iotopでは、1秒当たりのディスク入出力使用量(バイト数)、ディスクからページへのスワップ・インまたはI/Oの待機に費やした時間の割合、およびコマンド名など、各プロセスに対するI/O情報が表示されます。コマンドの出力例を次に示します。

sudo iotop
Total DISK READ :	0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:	0.00 B/s | Actual DISK WRITE:       0.00 B/s
    TID  PRIO  USER     DISK READ DISK WRITE>    COMMAND                                            
      1 be/4 root        0.00 B/s    0.00 B/s systemd --switched-root --system --deserialize 16
      2 be/4 root        0.00 B/s    0.00 B/s [kthreadd]
...

出力の確認中に、矢印キーを使用するとソート・フィールドを変更でき、[A]を押すと、I/O単位を1秒ごとのバイト数と合計バイト数で切り替えることができ、[O]を押すと、すべてのプロセスの表示とI/Oを実行しているプロセスのみの表示を切り替えることができます。

 ファイル・システムの使用量の監視

sar -vコマンドでは、ディレクトリ・キャッシュ内の未使用キャッシュ・エントリの数(dentunusd)、および使用中のファイル・ハンドラ(file-nr)、inodeハンドラ(inode-nr)、擬似端末(pty-nr)の数がレポートされます。

sar -v
12:00:01 AM dentunusd   file-nr  inode-nr    pty-nr
12:10:33 AM     80101      2944     73074         0
12:20:33 AM     79788      2944     72654         0

nfsiostatは、マウントされている各NFSファイル・システムのI/O統計情報をレポートします。このコマンドが使用できない場合は、nfs-utilsパッケージをインストールしてください。

ネットワーク使用状況の監視

ip -s linkコマンドでは、送信バイト数(TX)と受信バイト数(RX)など、すべてのネットワーク・デバイスに対するネットワーク統計とエラーが表示されます。droppedおよびoverrunフィールドには、ネットワーク・インタフェース飽和の指標が示されます。次に例を示します。

ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast   
    240        4        0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    240        4        0       0       0       0       
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:60:95:d5 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    258187485  671730   0       0       0       17296   
    TX: bytes  packets  errors  dropped carrier collsns 
    13227598   130827   0       0       0       0

ss -sコマンドでは、各プロトコルに対するサマリー統計が表示されます。次に例を示します。

ss -s
Total: 193
TCP:   9 (estab 2, closed 0, orphaned 0, timewait 0)

グラフィック・システム・モニターの使用

GNOMEデスクトップ環境には、グラフィカル・システム・モニターが組み込まれています。これを使用して、システム構成、実行中プロセス、リソース使用率およびファイル・システムに関する情報を表示できます。

システム・モニターを表示するには、次のコマンドを使用します。

gnome-system-monitor

リソース・タブを選択すると、次の情報が表示されます。

  • グラフィック形式のCPU使用率履歴および現在のCPU使用率の割合。

  • グラフィック形式のメモリー使用量とスワップ使用量の履歴、および現在のメモリー使用量とスワップ使用量。

  • グラフィック形式のネットワーク使用状況の履歴、受信および送信ごとの現在のネットワーク使用状況、および受信データと送信データの合計量。

システム・モニターのマニュアルを表示するには、[F1]を押すか、またはヘルプを選択し、目次を選択します。