DigitalOceanドロップレットのCPU使用を監視する方法

前書き

メモリの量、キャッシュのサイズ、ディスクの読み取りと書き込みの速度、処理能力の速度と可用性はすべて、インフラストラクチャのパフォーマンスに影響する重要な要素です。 この記事では、入門的なCPU監視の概念とアラート戦略に焦点を当てます。 2つの一般的なLinuxユーティリティuptimetopを使用して、CPUの負荷と使用率について学習する方法と、Dropletに関連する重要な変更について通知するようにDigitalOceanアラートポリシーを設定する方法について説明します。 CPU。

前提条件

ここで説明する2つのユーティリティ、uptimetopは、ほとんどのLinuxディストリビューションのデフォルトインストールの一部として使用できます。 アラートポリシーなどのDigitalOcean機能を利用するには、監視を有効にしたDigitalOcean Dropletが必要です。

ガイドHow To Install and Use the DigitalOcean Agent for Monitoringでは、新しいドロップレットでモニタリングを有効にする方法と、すでに実行されているドロップレットにモニタリングエージェントを追加する方法について説明しています。

バックグラウンド

uptimetop、およびDigitalOceanモニタリングの詳細を掘り下げる前に、CPU使用率の測定方法と、望ましいパターンの種類を検討します。

CPU負荷と CPU使用率

CPU負荷とCPU使用率は、コンピューターの処理能力の使用を調べる2つの異なる方法です。

2つの主な違いを概念化するために、プロセッサを食料品店のレジ係として、タスクを顧客として想像できます。 CPU loadは、顧客が次のレジ係が利用可能になるのを待つ単一のチェックアウトラインを持つようなものです。 負荷とは、基本的に、レジにいる人を含めた列に並んだ人の数のことです。 行が長いほど、待機時間が長くなります。 対照的に、CPU utilizationは、レジ係がどれだけ忙しいかだけに関係し、何人の顧客が並んで待っているかを知りません。

具体的には、サーバーのCPUを使用するためにタスクがキューに入れられます。 キューの一番上に到着すると、一定の処理時間を受け取るようにスケジュールされます。 完了すると終了します。それ以外の場合は、キューの最後に戻ります。 どちらの場合でも、行の次のタスクが順番を取得します。

CPU loadは、処理中のタスクを含む、スケジュールされたタスクのキューの長さです。 タスクは数ミリ秒で切り替わる可能性があるため、負荷の1つのスナップショットは、一定期間に取得された複数の読み取り値の平均ほど有用ではないため、負荷値は多くの場合、load average.として提供されます。

CPU負荷は、CPU時間に対する需要の程度を示しています。 需要が高いと、CPU時間の競合やパフォーマンスの低下につながる可能性があります。

一方、CPU Utilizationは、待機しているプロセスの数を認識せずに、CPUがどれだけビジーであるかを示します。 使用率を監視すると、経時的な傾向を示し、スパイクを強調し、不要なアクティビティを特定するのに役立ちます。

非正規化値と正規化値

シングルプロセッサシステムでは、合計容量は常に1です。 マルチプロセッサシステムでは、2つの異なる方法でデータを表示できます。 すべてのプロセッサの合計容量は、プロセッサの数に関係なく100%としてカウントされ、これはnormalized.として知られています。もう1つのオプションは、各プロセッサを1つのユニットとしてカウントすることで、2プロセッサシステム全体を使用率は200%、フル使用の4プロセッサシステムは400%などです。

CPU負荷または使用量の数値を正しく解釈するには、サーバーに搭載されているプロセッサの数を知る必要があります。

CPU情報の表示

nprocコマンドを--allオプションとともに使用して、プロセッサーの数を表示できます。 --allフラグがない場合、現在のプロセスで使用可能な処理装置の数が表示されます。これは、使用中のプロセッサーの総数よりも少なくなります。

nproc --all
Output of nproc2

最近のほとんどのLinuxディストリビューションでは、lscpuコマンドを使用することもできます。このコマンドは、プロセッサの数だけでなく、アーキテクチャ、モデル名、速度なども表示します。

lscpu
Output of lscpuArchitecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 63
Model name:            Intel(R) Xeon(R) CPU E5-2650L v3 @ 1.80GHz
Stepping:              2
CPU MHz:               1797.917
BogoMIPS:              3595.83
Virtualization:        VT-x
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              30720K
NUMA node0 CPU(s):     0,1
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm vnmi ept fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat

プロセッサの数を知ることは、さまざまなツールのCPU関連の出力が実際に意味するものを理解する上で重要です。

負荷と使用率の最適な値は何ですか?

最適なCPU使用率は、サーバーが行うと予想される作業の種類によって異なります。 高いCPU使用率が持続すると、システムとの応答性が低下します。 多くの場合、計算負荷の高いアプリケーションとバッチジョブが常にフルキャパシティまたはその近くで実行されることが適切です。 ただし、システムがWebページを提供したり、SSHなどのサービスに応答性の高いインタラクティブセッションを提供することが期待される場合は、アイドル処理能力を利用できることが望ましい場合があります。

パフォーマンスの多くの側面と同様に、システム上のサービスの特定のニーズについて学習し、予期しない変更を監視することは、リソースを最適化するための鍵です。

CPUの監視

システムのCPUステータスに関する洞察を提供できるツールは多数あります。 uptimetopの2つのコマンドを見ていきます。 どちらも、最も一般的なLinuxディストリビューションのデフォルトインストールの一部であり、CPUの負荷と使用率を調査するために一般的にオンデマンドで使用されます。 以下の例では、上記でプロファイルした2コアのドロップレットを調べます。

稼働時間

uptimeコマンドから始めて、CPU負荷を確認します。これは、基本的なCPU負荷の平均のみを示していますが、システムリソースがほとんど必要ないため、システムが対話型クエリにゆっくりと応答する場合に役立ちます。

稼働時間ショー:

  • コマンドが実行された瞬間のシステム時刻

  • サーバーが実行されていた時間

  • ユーザーがマシンに接続した数

  • 過去1、5、および15分間のCPU負荷平均。

 uptime
Output 14:08:15 up 22:54,  2 users,  load average: 2.00, 1.37, 0.63

この例では、ほぼ23時間稼働していたサーバーで午後2時8分にコマンドが実行されました。 uptimeが実行されたときに、2人のユーザーが接続されました。 このサーバーには2つのCPUがあるため、コマンドが実行される前の1分間にCPU負荷平均2.00は、その1分間に平均して2つのプロセスがCPUを使用し、プロセスが待機していないことを意味します。 5分間の平均負荷は、その間隔の一部について、約60%の時間でアイドル状態のプロセッサがあったことを示しています。 15分の値は、さらに多くの利用可能な処理時間があったことを示します。 3つの図を合わせると、過去15分間の負荷の増加が示されています。

稼働時間は、負荷平均を見るのに役立ちますが、より詳細な情報を取得するために、トップに戻ります。

top

uptimeと同様に、topはLinuxシステムとUnixシステムの両方で使用できますが、事前設定された履歴間隔の負荷平均を表示するだけでなく、定期的なリアルタイムCPU使用率情報やその他の関連するパフォーマンスメトリックを提供します。 uptimeが実行されて終了するのに対し、topはフォアグラウンドに留まり、定期的に更新されます。

top

The Header Block
最初の5行は、サーバー上のプロセスに関する要約情報を提供します。

Outputtop - 18:31:30 up 1 day,  3:17,  2 users,  load average: 0.00, 0.00, 0.00
Tasks: 114 total,   1 running, 113 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7.7 us,  0.0 sy,  0.0 ni, 92.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.1 st
KiB Mem :  4046532 total,  3238884 free,    73020 used,   734628 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  3694712 avail Mem
  • 最初の行は、uptimeの出力とほぼ同じです。 uptimeと同様に、1分、5分、および15分の負荷平均が表示されます。 この行とuptimeの出力の唯一の違いは、行の先頭にコマンド名topが表示され、topがデータを更新するたびに時刻が更新されることです。

  • 2行目には、タスクの状態の概要が表示されます。プロセスの総数と、実行中、スリープ中、停止中、またはゾンビの数が表示されます。

  • 3行目は、CPU使用率を示しています。 これらの数値は正規化され、パーセントとして表示されます(%記号なし)。このため、この行のすべての値は、CPUの数に関係なく100%になります。

  • ヘッダー情報の4行目と5行目は、それぞれメモリとスワップの使用状況を示しています。

最後に、ヘッダーブロックの後に、個々のプロセスに関する情報が記載されたテーブルが続きます。これについては後で説明します。

以下のヘッダーブロックの例では、1分間の平均負荷がプロセッサ数を0.77超えています。これは、待機時間が少し短いキューを示しています。 合計CPU容量が100%使用され、十分な空きメモリがあります。

Outputtop - 14:36:05 up 23:22,  2 users, load average: 2.77, 2.27, 1.91
Tasks: 117 total,   3 running, 114 sleeping,   0 stopped,   0 zombie
%Cpu(s): 98.3 us,  0.2 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.2 si,  1.3 st
KiB Mem :  4046532 total,  3244112 free,    72372 used,   730048 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  3695452 avail Mem
 . . .

CPU行の各フィールドをさらに詳しく見てみましょう。

  • us, user: time running un-niced user processes
    このカテゴリは、明示的なスケジューリング優先度なしで開始されたユーザープロセスを指します。
    より具体的には、Linuxシステムuse the nice command to set a process’s scheduling priorityであるため、「un-niced」はniceはデフォルト値の変更には使用されませんでした。 userniceの値は、すべてのユーザープロセスを説明します。 このカテゴリのCPU使用率が高い場合は、暴走プロセスを示している可能性があり、プロセステーブルの出力を使用して、これが当てはまるかどうかを識別できます。

  • sy, system: time running kernel processes
    ほとんどのアプリケーションには、ユーザーコンポーネントとカーネルコンポーネントの両方があります。 Linuxカーネルがシステムコールの実行、権限の確認、アプリケーションに代わってデバイスとのやり取りなどを行っている場合、CPUのカーネルの使用がここに表示されます。 プロセスが独自の作業を行っている場合、プロセスは上記のuserの図に表示されます。優先度がniceコマンドを使用して明示的に設定されている場合は、次のniceの図に表示されます。 。

  • ni, nice: time running niced user processes
    userと同様に、これはカーネルを含まないプロセスタスクを指します。 user,とは異なり、これらのタスクのスケジューリング優先度は明示的に設定されました。 プロセスの良さのレベルは、ヘッダーNIの下のプロセステーブルの4番目の列に示されます。 優先度が通常以上のタスクは必要に応じて処理能力を得ることができるため、多くのCPU時間を消費するniceness値が1〜20のプロセスは一般に問題になりません。 ただし、-1から-20の間のナイスネスが高いタスクがCPUの不均衡な量を使用している場合、それらはシステムの応答性に容易に影響を与え、さらなる調査が必要になります。 システムに応じて-19または-20の最高のスケジューリング優先順位で実行される多くのプロセスは、システムの安定性に影響を与える重要なタスクを実行するためにカーネルによって生成されることに注意してください。 表示されるプロセスがわからない場合は、プロセスを強制終了するのではなく、調査することをお勧めします。

  • id, idle: time spent in the kernel idle handler
    この数値は、CPUが使用可能でアイドル状態の両方であった時間の割合を示します。 usernice、およびidleの合計値がほぼ100%の場合、システムは一般にCPUに関して正常に機能しています。

  • wa, IO-wait : time waiting for I/O completion
    IO待機の図は、プロセッサが読み取りまたは書き込みアクティビティを開始し、I / O操作が完了するのを待機していることを示しています。 Read/write tasks for remote resources like NFS and LDAP will count in IO-wait as well. アイドル時間と同様に、ここでのスパイクは正常ですが、この状態での頻繁な時間または持続時間は、非効率的なタスク、遅いデバイス、または潜在的なハードディスクの問題を示唆しています。

  • hi : time spent servicing hardware interrupts
    これは、ディスクやハードウェアネットワークインターフェイスなどの周辺機器からCPUに送信される物理的な割り込みに費やされる時間です。 hardware interruptの値が高い場合、周辺機器の1つが正しく機能していない可能性があります。

  • si : time spent servicing software interrupts
    ソフトウェア割り込みは、物理デバイスではなくプロセスによって送信されます。 CPUレベルで発生するハードウェア割り込みとは異なり、ソフトウェア割り込みはカーネルレベルで発生します。 software interrupt値が多くの処理能力を使用している場合は、CPUを使用している特定のプロセスを調査してください。

  • st: time stolen from this vm by the hypervisor
    「スチール」値は、ハイパーバイザーがそれ自体または別の仮想CPUにサービスを提供している間に、仮想CPUが物理CPUの待機に費やす時間を示します。 基本的に、このフィールドのCPU使用量は、VMが使用できる処理能力を示しますが、物理ホストまたは別の仮想マシンによって使用されているため、アプリケーションで使用できる処理能力はnotです。 一般的に、短期間で最大10%のスチール値が表示されても、心配する必要はありません。 長時間にわたる大量のスチールは、物理サーバーがサポートできないほどCPUの需要があることを示している可能性があります。

topのヘッダーブロックで提供されるCPU使用率の概要を確認したので、CPU固有の列に注目して、その下に表示されるプロセステーブルを確認します。

The Process Table
サーバーで実行されているすべてのプロセスは、どの状態でも、summaryブロックの下に一覧表示されます。 以下の例には、上記のセクションのtopコマンドのプロセステーブルの最初の6行が含まれています。 デフォルトでは、プロセステーブルは%CPUでソートされているため、最もCPUを消費しているプロセスが最初に表示されます。

Output
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 9966 sammy     20   0    9528     96      0 R  99.7  0.0   0:40.53 stress
 9967 sammy     20   0    9528     96      0 R  99.3  0.0   0:40.38 stress
    7 root      20   0       0      0      0 S   0.3  0.0   0:01.86 rcu_sched
 1431 root      10 -10    7772   4556   2448 S   0.3  0.1   0:22.45 iscsid
 9968 root      20   0   42556   3604   3012 R   0.3  0.1   0:00.08 top
 9977 root      20   0   96080   6556   5668 S   0.3  0.2   0:00.01 sshd
...

CPU%はパーセント値として表示されますが、正規化されていないため、この2コアシステムでは、両方のプロセッサーが完全に使用されている場合、プロセステーブルのすべての値の合計は200%になります。

[。注意]##

Note:正規化された値を表示したい場合は、Shift + Iを押すと、表示がIrixモードからSolarisモードに切り替わります。 これにより、サーバーの合計CPU数で平均化された同じ情報が表示されるため、使用量が100%を超えることはありません。 Solarisモードに切り替えると、Irixモードがオフになっているという短いメッセージが表示され、ストレスプロセスの値がそれぞれほぼ100%からそれぞれ約50%に切り替わります。

Output  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
10081 sammy     20   0    9528     96      0 R 50.0  0.0   0:49.18 stress
10082 sammy     20   0    9528     96      0 R 50.0  0.0   0:49.08 stress
 1439 root      20   0  223832  27012  14048 S  0.2  0.7   0:11.07 snapd
    1 root      20   0   39832   5868   4020 S  0.0  0.1   0:07.31 systemd

これまで、CPU負荷とCPU使用率を調べるために一般的に使用される2つのLinuxコマンドを調べました。 次のセクションでは、DigitalOcean Dropletsで追加費用なしで利用できるCPU監視ツールについて説明します。

CPU使用率のDigitalOceanモニタリング

デフォルトでは、コントロールパネルでドロップレット名をクリックすると、すべてのドロップレットに帯域幅、CPU、およびディスクI / Oグラフが表示されます。

Screen capture of a Droplet name in the Control Panel

これらのグラフは、過去6時間、24時間、7日間、24時間の各リソースの使用状況を視覚化します。 CPUグラフは、CPU使用率情報を提供します。 濃い青色の線は、ユーザープロセスによるCPU使用率を示しています。 水色は、システムプロセスによるCPU使用を示します。 グラフの値とその詳細は、仮想コアの数に関係なく合計容量が100%になるように正規化されます。

Screen capture of the default CPU graph

グラフを使用すると、使用量が断続的または持続的に変化しているかどうかを確認でき、サーバーのCPU使用パターンの変化を見つけるのに役立ちます。

これらのデフォルトのグラフに加えて、追加のデータを収集して表示するために、DigitalOcean Agentをドロップレットにインストールできます。 エージェントを使用すると、システムにアラートポリシーを設定することもできます。 How To Install and Use the DigitalOcean Agent for Monitoringは、セットアップに役立ちます。

エージェントをインストールしたら、アラートポリシーを設定して、リソースの使用状況を通知できます。 選択するしきい値は、ワークロードによって異なります。

アラートの例

Monitoring for Change: CPU above 1%
主にテストコードの統合とソークにドロップレットを使用している場合は、サーバーにプッシュされた新しいコードによってCPU使用率が増加したかどうかを検出するために、履歴パターンをわずかに超えるアラートを設定できます。 。 CPUが1%に決して到達しない上記のグラフでは、5%の1%CPU使用のしきい値により、CPU使用に影響するコードベースの変更に関する早期警告を提供できます。

Screen capture of the Alert Policy form filled out with the values in the previous paragraph

ほとんどのシステムでは、このしきい値が完全に不適切になる可能性がありますが、期間を調整し、現在の平均負荷をわずかに上回るしきい値を設定することにより、新しいコードまたは新しいサービスがCPU使用率に影響を与える時期を早期に知ることができます。

Monitoring for an Emergency Situation: CPU Utilization above 90%
また、平均よりはるかに高いしきい値を設定することもできます。これは、重要と見なされ、迅速な調査が必要なしきい値です。 たとえば、5分間の間隔でCPU使用率が50%を維持しているサーバーが突然定期的に最大90%を急発した場合、すぐにログインして状況を調査することができます。 繰り返しますが、しきい値はシステムのワークロードに固有です。

結論

この記事では、uptimetop、LinuxシステムのCPUに関する洞察を提供する2つの一般的なLinuxユーティリティ、およびDigitalOceanMonitoringを使用してドロップレットのCPU使用率の履歴を確認する方法について説明しました。変更や緊急事態を警告します。

  • DigitalOcean Monitoringの詳細については、An Introduction to DigitalOcean Monitoringを参照してください。

  • 標準、ハイメモリ、およびハイCPUプランのいずれかを選択するためのガイダンスについては、Choosing the Right Droplet for your Applicationを参照してください。

  • よりきめ細かい監視サービスをお探しの場合は、ZabbixIcingaTICKなどの特定のツールの使用方法について詳しく知るか、TICKの完全なリストを確認してください。 t3)のチュートリアル。

Related