271 */, /* 270 * granularity and account the rest on the next rounds. 233 * @cputime: the cpu time spent in involuntary wait By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away. LinuxのCPU使用率を調べる人「LinuxでCPU使用率を調べたい。どんなコマンド・オプションで確認する?」→こんな悩みを解決します/1.sarコマンドで確認/2.vmstatコマンドで確認/3.topコマンドで確認/3コマンドの機能比較 15 * 'kernel_stat.h' contains the definitions needed for doing sar ファイルには CPU、メモリ、I/O、ネットワークの通信状況など、多くの情報が含まれています。, 今回の記事では、sar でどのようなリソースの状態が確認できるのか、ご紹介します。, 基本的に sar のマニュアルに記載されている内容が元になっていますが、特記事項がある場合は赤字にて補足しています。 なお、すべての項目の最下部に、各項目の平均値が表示されます。, 5.ディスク I/O 私たちは日頃の業務で、動作不良や障害のお問い合わせをいただいた際、sar ファイルを参照し、リソースの状態を確認します。 sarコマンドを使うことで、LinuxサーバのCPUやメモリ、DISK IOなどの様々な情報のモニタリングが可能です。, 車にはスピードやガソリン残量、モーターの回転数などの情報が見れるようになっているため、スピード違反やガス欠になるのを事前に防ぐことが可能です。, サーバについても、CPUやメモリ、DISK IOなどの情報を取得することで、異常の事前検知や、問題発生時の原因調査などが円滑におこなうことができるようになります。, sarとは、sysstatパッケージに含まれている、システムの統計情報を取得するコマンドです。名前は、System Admin Reporterの頭文字をとったものになります。, 大きな特徴としては、過去にさかのぼって情報が見れることです。topやvmstatでも同様の情報を確認することができますが、リアルタイムでの確認しかできません。sarの場合は、cronにて定期実行することで、過去の情報を保存し、あとから見返すことが可能になります。, CentOSのデフォルトインストールでは、sarコマンドを利用することはできません。sysstatパッケージに入っているので、インストールを行います。, なるべく短い間隔で取得できたほうが良いので、1分間隔で取得できるようにしてみましょう。, 「root /usr/lib64/sa/sa1 1 1」の設定を次のように変更することで、1分間隔で取得が可能になります。, 確認対象オプションは別途説明します。何も指定が無い場合は、CPUの情報が確認できます。, ログファイルは、「/var/log/sa/」へ保存されており、sa01のように、saの後に日付がついたファイル名になっています。, 「-s」「-e」:オプションを利用することで、時間を絞って確認することも可能です。, 2日の12時から13時の間の、メモリ状態を確認したい場合は次のようなコマンドになります。, %userが上昇している場合 ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!, >> 雑誌等の執筆依頼を受付しております。   ご希望の方はお気軽にお問い合わせください!. つまり、メモリやI/O deviceとCPUの距離も意識しないと片手落ちになるので注意が必要である。(...が、詳細は本稿のスコープを超えるので、また別の機会としたい。), ところで、以下の記事によれば、AWSの著名なユーザとしても知られているNetflixでは、%steal を監視して閾値を超えた場合、他のVMと競合が多いので効率が悪いと判断して、当該VMをshutdownし、他のVMを立ち上げる…といった運用をしているとのことである。(すごい、そこまでやるのか...), http://blog.scoutapp.com/articles/2013/07/25/understanding-cpu-steal-time-when-should-you-be-worried, コンテナの場合にどうなるのかは(まだ)調べていない。ただ、コンテナはOSの論理分割なので、物理環境上のコンテナであれば %steal は0になるような気がする。間違っていたら指摘してほしい。 ↩, インフラ系のソフトウェアエンジニアのようなバックラウンドをもって、現状は 'Architect' という肩書でR&Dっぽい仕事をしています。ここに記載する内容は個人の意見であり、所属会社/組織の見解とは必ずしも一致しません。. 232 * Account for involuntary wait time. 460 * Account a single tick of cpu time. # Run system activity accounting tool every 10 minutes, # 0 * * * * root /usr/lib64/sa/sa1 600 6 &, # Generate a daily summary of process accounting at 23:53, 【2019年改定後】AWS 認定ソリューションアーキテクト プロフェッショナル(SAP)合格のために勉強したこと, AWS 認定ソリューションアーキテクト – アソシエイト(SAA)合格のために勉強したこと, Fluentd、ElasticsearchとKibanaが使えそうな一つのシチュエーション. 典型的にはこんな感じである。, なお、この際NUMA topologyも意識すべきである。 Copyright © 2020 SIOS Technology, Inc. All Rights Reserved. 16 * some kernel statistics (CPU usage, context switches ...), (追記: 2017/03/06: 記述を修正しました。 @satoru_takeuchi さん、コメントありがとうございました!), 上記の通り、account_steal_time() は、渡された引数を前述のカウンタに足し込んでいるだけで、%steal 相当時間をハイパーバイザから取得してきてaccount_steal_time()を呼ぶ処理はkernel/sched/cputime.cにある。, 264行目でparavirt_steal_clock()を使って取得し、適宜加工した後で 275行目でaccount_steal_time()が呼ばれているのが見てとれると思う。, なお、paravirt_steal_clock() は inline関数で、実体は arch/x86/include/asm/paravirt.h にある。, さて、これらの処理はどんな契機で実行されているのか? Help us understand the problem. CPU の使用状況をチェックする方法 (sar -u)sar -u コマンドを使用すると、CPU の使用状況が表示されます。 $ sar -u 00:00:00 %usr %sys %wio %idle 01:00:00 0 0 0 100 利用方法としては、典型的には、仮想環境におけるVCPU pinning等のチューニングを行う指標にすることができる。 通常の設定では、Hugepage 機能は Off になっているため下記項目の値はすべて 0 となる。, ご覧いただきありがとうございます。 What is going on with this article? Lets cast the result to jiffies httpdやmysqlなどの特定アプリケーションでCPUが消費されている可能性があります。psコマンド等で対象のアプリケーションを確認しましょう。, %systemが上昇している場合 Why not register and get more from Qiita? sarコマンドを使うことで、LinuxサーバのCPUやメモリ、DISK IOなどの様々な情報のモニタリングが可能です。 サーバを運用する上で、モニタリングは非常に重要です。 Linuxコマンドで、sar (System Admin Reporter) というCPUやメモリ、ディスクなどの使用率を時間ごとに一覧表示してくれる便利なものがあります。サーバーに負荷がかかっていないかとか、何時何分頃に負荷が高いのかとか一目でわかる優れもの。 463 */, VCPUを、物理CPUのグループにmappingする(virsh の cpusetを使う) (n:mで固定), 各種ツール(sar, vmstat, mpstat等)で得られるCPU使用率のうち、%steal は仮想化環境におけるCPU資源の競合具合(特に競合に負けて盗まれた(=stealされた)分)をあらわしている。, you can read useful information later efficiently. # multiple directories, one for each month. 上で、「簡略化して書けば」と書いた。SMPシステムの場合には、CPUごとにカウンタが存在するため、システム全体のCPU使用率を出すのであればCPU数分だけ分母、分子ともにたしあげる。また、100%で正規化するのか、正規化せずにnCPUであればn00%とするのかは表示プログラムの実装しだいである。もちろん、特定のCPUの使用率を算出することもできる。, もう一点大事な点を強調しておくと、この計算はuser landで行われる。前述したようなプログラムは、基本的に /proc/stat からCPUごとのカウンタを読み出して計算を行っているのである。, ハイパーバイザ型の仮想環境の場合1、ゲストOSがプログラムを実行していたと思っているにもかかわらず、ホスト上で他のVMとのCPUの取り合い(競合)が発生し、実際にはハイパーバイザが物理CPUの時間を与えていないので、実世界では実行されていなかった…というようなことがおこる。, この、なんだか時間泥棒に盗まれたような(笑)時間を積算しているのが %steal に対応しているカウンタなのである。つまり %steal とは、時間泥棒さんに盗まれた時間の割合だと言える。, 言い換えれば、仮想環境において、同じハイパーバイザの上で動いている他のVMとCPU時間を取り合って競合が発生している場合にこの数値が0より大きくなる。, ところで、%steal を処理しなかったらどうなるのか? これらの値が大きい場合、処理するリクエストが多すぎてシステム性能に影響を与えているか、ディスク性能が低下している可能性がある。, 9.Hugepage 268 * steal is in nsecs but our caller is expecting steal 18 */, /* 調べてみたところ、少なくとも Ubuntu Xenial の linux-4.4 系kernelでは、(CONFIG_PARAVIRT が define されてる場合)準仮想化用のハイパーバイザ呼び出しを使っているようだ。自分に割り当てられなかったCPU時間をハイパーバイザから取得し、%stealに対応するCPU時間のカウンタに足し込んでいる。, 直接の足し込み処理をしているのは、kernel/sched/cputime.c にあるこのルーチンである。, kcpustat_this_cpu もマクロである。自分を実行中のCPUのkernel_cpustat構造体へのポインタを返す。また、ここは個別のハイパーバイザ非依存な、準仮想化環境におけるCPU時間stealへの対応処理である。 269 * time in jiffies. 本サイトに掲載されている社名、製品名、サービス名等は各社の商標または登録商標です。プライバシーポリシーお問い合わせ, [Adobeアカウント連携]その2 User Sync Tool for Linux, [Adobeアカウント連携]その1 User Sync Tool for Windows, ※「ユーザ」とは、ログインユーザだけでなく、httpd や mysqld などのデーモンも対象。, ※このフィールドには、ハードウェアおよびソフトウェア割り込みの処理に費やされた時間が含まれる。, ※このフィールドには、ハードウェアまたはソフトウェア割り込みの処理に費やされた時間は含まれない。, ※ソフトウェア割り込みの例:実行中のプログラムにおいて、エラーや例外が発生した場合。, ※この値が上昇している場合、高負荷な処理により CPU に負荷がかかっている可能性がある。, ※平常時は 0 に近い。メモリ不足によりスワップイン/スワップアウトが頻繁に発生すると、pswpin/pswpout の値が上昇。, ※pswpin と pswpout はページ数、pgpgin と pgpgout は KB 数を表示する。なお、1ページは 4KB または 8KB (マシンにより異なる) 。, ※メジャーフォールトとはディスクアクセスを伴うページフォールトであり、マイナーフォールトとはディスクアクセスを伴わないページフォールトである。, ※kswapd が十分なメモリを確保できない場合、プロセスがメモリを直接回収し、再利用する。, これらの値が大きい場合、処理するリクエストが多すぎてシステム性能に影響を与えているか、ディスク性能が低下している可能性がある。, ※マイナス値の場合、システムがバッファとして使用するページがほとんどないことを示す。, 通常の設定では、Hugepage 機能は Off になっているため下記項目の値はすべて 0 となる。, ※平常時は小さい数値であるが、この値が大きい場合 CPU に負荷がかかっている可能性がある。, ※ロードアベレージが上昇する原因として、ディスク I/O の増加や、実行待ちプロセス数の増加、などがある。, ※接続済みのデバイスが 2つある場合は、0 と 1 となり、それぞれの番号ごとに下記の値を表示する。, ※処理に必要なデータがキャッシュ上になく、メモリ等にデータを探す必要がある場合、キャッシュミスとなる。, App ServiceやWeb App for Containersによる色んなリリース方法(Blue-Greenデプロイやカナリアリリース), 【連載】世界一わかりみが深いコンテナ & Docker入門 〜 その1:コンテナってなに? 〜, 【連載】世界一わかりみが深いコンテナ & Docker入門 〜 その2:Dockerってなに? 〜, ユーザレベル(アプリケーション)で実行中に発生した CPU 使用率。このフィールドには、仮想プロセッサの実行に費やされた時間は含まれない。, 優先順位の高い (nice 値が変更された) ユーザレベル(アプリケーション)で実行中に発生した CPU 使用率。, システムが未処理のディスク I/O リクエストを出している間に、1つまたは複数の CPU がアイドル状態だった時間の割合 (I/O 待ちしている CPU 使用率)。, ハイパーバイザが別の仮想プロセッサ (ゲスト OS) を処理している間に、1つまたは複数の仮想 CPU が待機するのに費やした時間の割合。, 1つまたは複数の CPU がハードウェア割り込みを処理するのに費やした時間の割合。, 1つまたは複数の CPU がソフトウェア割り込みを処理するのに費やした時間の割合。, 1つまたは複数の CPU が仮想プロセッサ (ゲスト OS) の実行に費やした時間の割合。, 1つまたは複数の CPU が nice 値を変更されたゲストの実行に費やした時間の割合。, CPU がアイドル状態で、システムに未処理のディスク I/O リクエストがなかった時間の割合。, 1秒間に行なわれたページフォールトの数(メジャーフォールト、マイナーフォールトの合計)。, 1秒間にキャッシュから回収したページ数 (pgscank と pgscand の合計)。, 1秒間にディスクへ発行された I/O リクエスト数 (rtps と wtps の合計)。, 現在のシリアル回線において、1秒間に発生した受信割り込み (ハードウェア割り込み)。, 現在のシリアル回線において、1秒間に発生した送信割り込み (ハードウェア割り込み)。, デバイスに発行された I/O リクエストの経過時間の割合・デバイスの帯域幅使用率 (%)。, 1秒間に発生した rpc リクエストのうち、再送信が必要なものの数 (サーバータイムアウト等による)。, 1秒間に発生した rpc リクエストのうち、無効なリクエストの数。その処理中にエラーが発生したもの。. メモリ不足でswapアウトしているか、コピー処理などの大きなディスクIOが発生している可能性があります。プロセスの確認や、メモリ状況を調べます。, バッファとキャッシュはカーネルが自動で確保するメモリ量です。実際のアプリケーションにて、利用されているメモリ量を調べる場合は、使用中の物理メモリからバッファとキャッシュ分を引く必要があります。, 全てのインターフェースの情報がでてくるので、grepして確認すると見やすいと思います。, 通常saファイルは、cronで自動で出力されます。これを手動で出力したい場合は、-0オプションを利用します。, クラウド環境で利用する場合は、スケールアップに注意する必要があります。コア数が変更になると、sarのログ情報が壊れてしまいます。スケールアップ前には必ずログ情報を退避するようにしましょう。, ログファイルが無いとcronの定期実行の際に自動で作成されてしまうので、スケールアップ後も、必ずログが正常に読み込めることを確認するようにしてください。, 別の環境で取得したデータファイル(saXX)を-fオプションで読もうとした場合に、次のようなエラーで読み込めない場合があります。, データファイルsaXXを作ったサーバと、実際に読み込もうとしているサーバのsysstatのバージョンが異なると正常に読み込むことができません。, その場合は、「–legacy」オプションを試してみましょう。古いバージョンで作成されたデータファイルを読むことができます。, sarコマンドを利用することで、Linuxサーバの様々な情報を確認することができるようになりました。ログを残しておくことは、何かあったときに役立つ情報なので、必ず取得するようにしましょう。, 追伸.文字だけじゃイヤだ!俺は、グラフィカルにsarの結果を見たいんだっ!という人は、ksarを使って、sarの結果をグラフ化する方法をご覧ください。, メールアドレスは公開されませんのでご安心ください。また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。, # If value is greater than 28, then log files are kept in. コンテキストスイッチが頻発している可能性があります。httpdへのアクセス集中が発生していないか等を確認します。, %iowaitが上昇している場合 上記のsteal_account_steal_tick() は、基本的にはタイマ割り込みの処理の一環で呼び出される。直接呼び出す部分は以下の account_process_tick() で、たどっていくと、update_process_times()、 そしてtick の処理へさかのぼる。, ところで、CPUの実行モードが変わるのはtimer割り込みだけではない。user land のプログラムがsystem callを呼ぶなど、各種の契機がある。これらの処理でCPU時間のaccountingがどうなっているのかは、時間の都合で調べ切れなかったので、課題としておきたい。, さて、%steal が得られたとして何に使うのか? Linux で採取できるCPU使用量(率)の情報として、%user や %sys 等に加えて %steal という量がある。これが追加されたのは、仮想化が広く使われはじめた10年くらい前だろうか。筆者は Xen を調べていて気づいたのだが、もっと前にs390のために追加されたのかもしれない。当時、ESXの場合も含めて調べていたのだが、最近、KVMの場合にどういう実装になっているのか、ふと気になって軽く調べてみたのでメモ。 ホーム OSS sar ファイルの各項目について、改めて調査してみました sar ファイルの各項目について、改めて調査してみました 2019-06-10 貝野友香 OSS, Tips 0 # which are used for the generation of log files. Linux で採取できるCPU使用量(率)の情報として、%user や %sys 等に加えて %steal という量がある。これが追加されたのは、仮想化が広く使われはじめた10年くらい前だろうか。筆者は Xen を調べていて気づいたのだが、もっと前にs390のために追加されたのかもしれない。当時、ESXの場合も含めて調べていたのだが、最近、KVMの場合にどういう実装になっているのか、ふと気になって軽く調べてみたのでメモ。, まず最初に、sar や vmstat や mpstat 等、さまざまなツールでCPU使用率を取得することができるわけだが、どのような情報を元に、どのような計算を行って算出しているのか?, まず、kernel内ではboot以後の各種実行モードのCPU時間を分類して積算値として保持している。user モード、特権モード、割り込み処理に使った時間...等である。, この積算値のカウンタを使用して、たとえば、%user であれば、ある測定期間について(簡略化して書けば), %user = user モードのCPU実行時間 / すべてのモードのCPU実行時間の和, という計算を行う。 ブログの最新情報はSNSでも発信しております。 /* もちろん、CPUを使った時間が実際の値とはずれてくるため、上記の計算によって算出されるCPU使用率が狂うという影響がある。, 上述のように、Linuxの場合はCPUごとに各種実行モードのCPU時間のカウンタを持っている。以下では、手元にあった Ubuntu Xenial の linux-4.4.0-53-74 のソースツリーから引用する。, まず、関連する enum や構造体の定義/型宣言は include/kernel/kernel_stat.h の中にある。, enum cpu_usage_stat を見てわかるように、10個のモードに分類されていることがわかる。(しかし、CPUTIME_GUESTなんて追加されていたのね...), 43行目と44行目がCPUごとに定義するためのC言語のマクロで、上記はヘッダなので宣言だけであって実体はここにはない。余談だが、このあたりは @satoru_takeuchi さんが最近書いて話題になった「linuxカーネルで学ぶC言語のマクロ」の良いサンプルではないかと思う。 :), kernel_stat や kernel_cpustat の実体が定義されているのは kernel/sched/core.c である。こんな感じ。, さて、KVMの場合にはどう加算処理が行われるのか? 462 * @user_tick: indicates if the tick is a user or a system tick 461 * @p: the process that the cpu time gets accounted to # Compress (using gzip or bzip2) sa and sar files older than (in days): # Parameters for the system activity data collector (see sadc manual page). 17 * used by rstatd/perfmeter

234 */, /*