前書き

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

前提条件

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

ガイドhttps://www.digitalocean.com/community/tutorials/how-to-install-and-use-the-digitalocean-agent-for-monitoring [監視のためにDigitalOcean Agentをインストールおよび使用する方法]では、新しいドロップレットで監視を有効にし、既に実行中のドロップレットに監視エージェントを追加する方法。

バックグラウンド

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

CPU負荷と CPU使用率

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

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

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

  • CPU負荷*は、処理中のタスクを含む、スケジュールされたタスクのキューの長さです。 タスクはミリ秒単位で切り替えることができるため、負荷の単一のスナップショットは一定期間に取得された複数の読み取り値の平均ほど有用ではないため、負荷値は*負荷平均*として提供されることがよくあります。

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

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

非正規化値と正規化値

シングルプロセッサシステムでは、合計容量は常に1です。 マルチプロセッサシステムでは、2つの異なる方法でデータを表示できます。 すべてのプロセッサの合計容量は、プロセッサの数に関係なく100%としてカウントされます。これは「正規化」と呼ばれます。他のオプションは、各プロセッサをユニットとしてカウントすることです。容量が200%の場合、フル使用の4プロセッサシステムは容量が400%のようになります。

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

CPU情報の表示

`-all +`オプションを指定した ` nproc `コマンドを使用して、プロセッサの数を表示できます。 `-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

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ステータスに関する洞察を提供できるツールは多数あります。 2つのコマンド、「+ uptime 」と「 top +」を見ていきます。 どちらも、最も一般的な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負荷平均は、その1分間に平均して2つのプロセスがCPUを使用し、プロセスが待機していないことを意味します。 5分間の平均負荷は、その間隔の一部について、約60%の時間でアイドル状態のプロセッサがあったことを示しています。 15分という値は、さらに利用可能な処理時間があったことを示しています。 3つの図を合わせると、過去15分間の負荷の増加が示されています。

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

top

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

top

ヘッダーブロック +最初の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%使用され、十分な空きメモリがあります。

Output
Tasks: 117 total,   3 running, 114 sleeping,   0 stopped,   0 zombie

KiB Mem :  4046532 total,  3244112 free,    72372 used,   730048 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  3695452 avail Mem
. . .

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

  • * us、ユーザー:実行中のinnicedユーザープロセス*
    このカテゴリは、明示的なスケジューリング優先度なしで開始されたユーザープロセスを指します。 より具体的には、Linuxシステムhttps://www.digitalocean.com/community/tutorials/how-to-use-ps-kill-and-nice-to-manage-processes-in-linux#how-to-adjust- process-priorities [プロセスのスケジューリング優先度を設定するには、 ` nice `コマンドを使用します]ので、「uniced」は、デフォルト値の変更に ` nice +`が使用されなかったことを意味します。 * user および nice *の値は、すべてのユーザープロセスを説明します。 このカテゴリのCPU使用率が高い場合は、暴走プロセスを示している可能性があり、プロセステーブルの出力を使用して、これが当てはまるかどうかを識別できます。

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

  • * ni、nice:nicedユーザープロセスの実行時間*

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

  • * id、idle:カーネルのアイドルハンドラで費やされた時間*
    この図は、CPUが使用可能でアイドルであった時間の割合を示しています。 システムは、通常、* user nice 、および idle *の数値が100%に近い場合、CPUに関して正常に動作しています。

  • * wa、IO-wait:I / O完了を待つ時間*
    IO-waitの図は、プロセッサが読み取りまたは書き込みアクティビティを開始し、I / O操作が完了するのを待っていることを示しています。 NFSやLDAPなどのリモートリソースの読み取り/書き込みタスクもIO-waitにカウントされます。 アイドル時間と同様に、ここでのスパイクは正常ですが、この状態での頻繁な時間または持続時間は、非効率的なタスク、遅いデバイス、または潜在的なハードディスクの問題を示唆しています。

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

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

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

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

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

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

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

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

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

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

image:https://assets.digitalocean.com/articles/monitor-cpu/droplet-control.png [コントロールパネルのドロップレット名のスクリーンキャプチャ]

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

image:https://assets.digitalocean.com/articles/monitor-cpu/default-cpu-graph.png [デフォルトCPUグラフのスクリーンキャプチャ]

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

これらのデフォルトのグラフに加えて、追加のデータを収集して表示するために、DigitalOcean Agentをドロップレットにインストールできます。 エージェントを使用すると、システムにアラートポリシーを設定することもできます。 https://www.digitalocean.com/community/tutorials/how-to-install-and-use-the-digitalocean-agent-for-monitoring [監視のためにDigitalOcean Agentをインストールして使用する方法]は、設定に役立ちます。アップ。

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

アラートの例

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

image:https://assets.digitalocean.com/articles/monitor-cpu/low-alert.png [前の段落の値が入力されたアラートポリシーフォームのスクリーンキャプチャ]

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

*緊急事態の監視:90%を超えるCPU使用率 たとえば、5分間の間隔でCPU使用率が50%を維持しているサーバーが突然定期的に最大90%を急発した場合、すぐにログインして状況を調査することができます。 繰り返しますが、しきい値はシステムのワークロードに固有です。

結論

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

  • DigitalOceanモニタリングの詳細については、https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-monitoring [DigitalOceanモニタリングの概要]を参照してください。

  • Standard、High Memory、High CPUプランの選択に関するガイダンスについては、https://www.digitalocean.com/community/tutorials/choosing-the-right-droplet-for-your-application [あなたの申請]。

  • より詳細な監視サービスを探している場合は、https://www.digitalocean.com/community/tags/monitoring?type = tutorials [Zabbix]、https:/のような特定のツールの使用についてさらに学習することをお勧めします。 /www.digitalocean.com/community/tutorials/how-to-install-icinga-and-icinga-web-on-ubuntu-16-04[Icinga]、およびhttps://www.digitalocean.com/community/tutorials / how-to-monitor-system-metrics-with-the-tick-stack-on-ubuntu-16-04 [TICK]またはhttps://www.digitalocean.com/community/tags/monitoringの完全なリストを確認する?type = tutorials [DigitalOcean Monitoring]チュートリアル。