開発者ドキュメント

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

Introduction

The amount of memory, the size of the cache, the speed of reading from and writing to disk, and the speed and availability of processing power are all key elements that affect the performance of your infrastructure. この記事では、入門的なCPU監視の概念とアラート戦略に焦点を当てます。 2つの一般的なLinuxユーティリティの使用方法について説明します。 uptimetop、CPUの負荷と使用率、およびDropletのCPUに関連する重要な変更について通知するようにDigitalOceanアラートポリシーを設定する方法について学習します。

前提条件

私たちが議論する2つのユーティリティ、 uptimetop ほとんどのLinuxディストリビューションのデフォルトインストールの一部として利用できます。 アラートポリシーなどのDigitalOcean機能を利用するには、監視が有効になっているDigitalOceanドロップレットが必要です。

ガイドDigitalOceanAgent for Monitoring をインストールして使用する方法では、新しいドロップレットでモニタリングを有効にする方法と、すでに実行されているドロップレットにモニタリングエージェントを追加する方法について説明します。

Background

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

CPU負荷と CPU使用率

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

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

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

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

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

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

非正規化値と正規化値

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

In order to correctly interpret the CPU load or usage figures, we’ll need to know how many processors the server has.

Displaying CPU Information

We can use the nproc とのコマンド --all プロセッサの数を表示するオプション。 なし --all フラグを立てると、現在のプロセスで使用可能な処理ユニットの数が表示されます。これは、使用中のプロセッサの総数よりも少なくなります。

  1. nproc --all
Output of nproc
2

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

  1. lscpu
Output of lscpu
Architecture: 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などのサービスに応答性の高いインタラクティブセッションを提供したりすることが期待される場合は、アイドル状態の処理能力を利用できることが望ましい場合があります。

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

Monitoring the CPU

There are a multitude of tools that can provide insight into a system’s CPU status. 2つのコマンドを見ていきます。 uptimetop. どちらも最も一般的なLinuxディストリビューションのデフォルトのインストールの一部であり、CPUの負荷と使用率を調査するためにオンデマンドで一般的に使用されます。 In the examples that follow, we’ll examine the 2-core Droplet we profiled above.

uptime

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

稼働時間の表示:

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

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

Uptime provides a helpful glance at the load average, but In order to get more in-depth information, we’ll turn to top.

top

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

  1. top

ヘッダーブロック最初の5行は、サーバー上のプロセスに関する要約情報を提供します。

Output
top - 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

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

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

Output
top - 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ラインの各フィールドをさらに詳しく見てみましょう。

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

プロセステーブルサーバーで実行されているすべてのプロセスは、どの状態でも、サマリーブロックの下に一覧表示されます。 以下の例には、プロセステーブルの最初の6行が含まれています。 top 上記のセクションのコマンド。 デフォルトでは、プロセステーブルは%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%になるはずです。

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

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コマンドについて説明してきました。 次のセクションでは、DigitalOceanDropletsで追加費用なしで利用できるCPU監視ツールについて説明します。

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

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

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

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

これらのデフォルトのグラフに加えて、DropletにDigitalOcean Agentをインストールして、追加のデータを収集および表示できます。 エージェントでは、システムのアラートポリシーを設定することもできます。 DigitalOcean Agent for Monitoring をインストールして使用する方法は、セットアップに役立ちます。

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

Example Alerts

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

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

緊急事態の監視:CPU使用率が90%を超えているまた、平均よりはるかに高いしきい値を設定することもできます。これは、重要と見なされ、迅速な調査が必要なしきい値です。 たとえば、5分間隔で50%のCPU使用が持続したサーバーが、かなり定期的に90%まで急上昇した場合は、すぐにログインして状況を調査することをお勧めします。 この場合も、しきい値はシステムのワークロードに固有です。

Conclusion

In this article, we’ve explored uptimetop、Linuxシステム上のCPUに関する洞察を提供する2つの一般的なLinuxユーティリティ、およびDigitalOcean Monitoringを使用してDropletのCPU使用率の履歴を確認し、変更や緊急事態を警告する方法。

モバイルバージョンを終了