プロセスの個別のCPUコア使用率を測定するにはどうすればよいですか?


114

コアによる特定のプロセスCPU使用率を測定する方法はありますか?

私が知っているトップは、コアとすることにより、システム全体のCPU使用率の測定に適してタスクセットを上で実行するプロセスに許可されているCPUコアについての情報を提供することができます。

しかし、CPUコアによる特定のプロセスのCPU使用率をどのように測定しますか?

回答:


139

あなたはまだこれをトップで行うことができます。topの実行中にキーボードで「1」を押すと、コアごとのCPU使用率が表示されます。

特定のユーザーアカウントで特定のプロセスを実行することで表示されるプロセスを制限し、Type 'u'を使用してそのユーザーに制限します。


3
を押してI、(SolarisモードではなくIrixモードを切り替えることもできます。の場合on、プロセスリストに表示されるパーセンテージは、CPUスレッドを基準にしています。の場合off、この割合はCPU全体の容量(つまり、すべてのスレッド -別名すべてのコア)に対して相対的に表示されます。
7heo.tk

8
これは単一のプロセスに固有のものではなく、複数のコアにわたるすべてのプロセスのCPU使用率を示しています
m_vitaly

ページに「1」を引数として渡すにはどうしたらいいのでしょうかtop、とmanページは書いてtop -1いますが、文句を言っています!個別のCPU使用率が表示された状態top -1 -n 1で、単一の反復を取得するのは良いことですtop
クォンタム

76

以下を使用できます。

 mpstat -P ALL 1

各コアがビジー状態であることが示され、毎秒自動的に更新されます。出力は次のようになります(クアッドコアプロセッサ上)。

10:54:41 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
10:54:42 PM  all    8.20    0.12    0.75    0.00    0.00    0.00    0.00    0.00   90.93
10:54:42 PM    0   24.00    0.00    2.00    0.00    0.00    0.00    0.00    0.00   74.00
10:54:42 PM    1   22.00    0.00    2.00    0.00    0.00    0.00    0.00    0.00   76.00
10:54:42 PM    2    2.02    1.01    0.00    0.00    0.00    0.00    0.00    0.00   96.97
10:54:42 PM    3    2.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   98.00
10:54:42 PM    4   14.15    0.00    1.89    0.00    0.00    0.00    0.00    0.00   83.96
10:54:42 PM    5    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00
10:54:42 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
10:54:42 PM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

このコマンドは元の質問には答えませんが、特定のプロセスのCPUコア使用率を表示しません。


3
これは本当に質問に答えるものではないと思います。これは、他に実行中のプロセスがない場合にのみ同じです。また、これはクアッドコアCPUではなく、8コア(HTが有効なクワッド)のようです。

1
これは、HTが有効なクアッドコアです。
Kamran Bigdely 16

元の質問には答えません。しかし、私からそれを言及しなかったことに対して(-1)。
KGhatak 16

1
私は@KGhatakに同意します、これは元の質問-1に答えません
jodag

41

使用できますps
たとえば、デュアルコアCPUで2つのビジースレッドを持つpythonプロセスを使用します。

$ ps -p 29492 -L -o pid,tid,psr,pcpu
  PID   TID PSR %CPU
29492 29492   1  0.0
29492 29493   1 48.7
29492 29494   1 51.9

(PSRは、スレッドが現在割り当てられているCPU IDです)

スレッドが同じCPUコアで実行されていることがわかります(GILのため)

jythonで同じpythonスクリプトを実行すると、スクリプトが両方のコアを利用していることがわかります(他にも多くのサービスやほとんどアイドル状態のスレッドがあります)。

$ ps -p 28671 -L -o pid,tid,psr,pcpu
  PID   TID PSR %CPU
28671 28671   1  0.0
28671 28672   0  4.4
28671 28673   0  0.6
28671 28674   0  0.5
28671 28675   0  2.3
28671 28676   0  0.0
28671 28677   1  0.0
28671 28678   1  0.0
28671 28679   0  4.6
28671 28680   0  4.4
28671 28681   1  0.0
28671 28682   1  0.0
28671 28721   1  0.0
28671 28729   0 88.6
28671 28730   1 88.5

出力を処理し、各CPUコアの合計CPUを計算できます。

残念ながら、このアプローチは100%信頼できるとは思われません。最初のケースでは、2つの作業スレッドが各CPUコアに分離されていると報告されたり、後者のケースでは、2つのスレッドがオンであると報告されたりすることがあります同じコア..


13

htop 個々のコアの使用法の概要を説明します


4

ps:ソリューションは、元の質問はを求めまさにんほとんど何私が必要として投げいくつかのbashとした特定のプロセスごとのコアの使用を参照してください

これは、マルチスレッドプロセスのコアごとの使用状況も示しています。

次のように使用します: cpustat `pgrep processname`` pgrep otherprocessname` ...

#!/bin/bash

pids=()
while [ $# != 0 ]; do
        pids=("${pids[@]}" "$1")
        shift
done

if [ -z "${pids[0]}" ]; then
        echo "Usage: $0 <pid1> [pid2] ..."
        exit 1
fi

for pid in "${pids[@]}"; do
        if [ ! -e /proc/$pid ]; then
                echo "Error: pid $pid doesn't exist"
                exit 1
        fi
done

while [ true ]; do
        echo -e "\033[H\033[J"
        for pid in "${pids[@]}"; do
                ps -p $pid -L -o pid,tid,psr,pcpu,comm=
        done
        sleep 1
done

注:これらの統計情報は、最後のX秒ではなくプロセスの存続期間に基づいているため、カウンターをリセットするには、プロセスを再起動する必要があります。


C lib関数read()およびopen()を使用して、/ proc / pid / *にある疑似ファイルを開き、必要なデータを解析できます。
GL2014 2016年

2
dstat -C 0,1,2,3 

最初の4コアのCPU使用率も表示されます。もちろん、コア数が32の場合、このコマンドは少し長くなりますが、コア数が少ない場合に役立ちます。

たとえば、コア3と7だけに関心がある場合は、

dstat -C 3,7

これは単一のプロセスにどのように関連しますか?
アインポクルム

1

私はこの問題を抱えていて、ここで同様の答えを見つけました。

方法は、top希望する方法に設定してからW(大文字のW)を押します。これにより、topの現在のレイアウトが$ HOME / .toprcの構成ファイルに保存されます

ただしtop、異なる構成で複数のを実行する場合は、機能しない可能性があります。

だから私が回避策と考えるものを介して、次のいずれかを実行することで、異なる構成ファイルに書き込む/異なる構成ファイルを使用することができます...

1)バイナリの名前を変更します

  ln -s /usr/bin/top top2
  ./top2

今、.top2rcあなたの$ HOMEに書き込まれようとしています

2)$ HOME / .binary-name.rcファイルに構成ファイルを書き込むため、$ HOMEを別のパスに設定します。

HOME=./
top

.toprc現在のフォルダに書き込まれようとしています。

他の人々のコメントを使用して、さまざまな使用法の説明を先頭に追加することで、その情報のバッチ出力を作成でき、後者はスクリプトを介して情報を結合します。スクリプトほど簡単ではないかもしれませんが、すべてのプロセスを提供できるようにトップを見つけたので、後で長時間実行したときに、他の方法では見落としたかもしれない状態を要約してキャプチャできるようになります(漂遊プロセスによる突然のCPU使用については説明されていません)


1

perf statはあなたが必要なものだと思った。

--cpu=listオプションを指定すると、プロセスの特定の使用法が表示されます。以下は、perf stat --cpu=0-7 --no-aggr -- make all -jコマンドを使用してプロジェクトをビルドするCPUの使用状況を監視する例です。出力は次のとおりです。

CPU0         119254.719293 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU1         119254.724776 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU2         119254.724179 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU3         119254.720833 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU4         119254.714109 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU5         119254.727721 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU6         119254.723447 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU7         119254.722418 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU0                 8,108 context-switches          #    0.068 K/sec                    (100.00%)
CPU1                26,494 context-switches                                              (100.00%)
CPU2                10,193 context-switches                                              (100.00%)
CPU3                12,298 context-switches                                              (100.00%)
CPU4                16,179 context-switches                                              (100.00%)
CPU5                57,389 context-switches                                              (100.00%)
CPU6                 8,485 context-switches                                              (100.00%)
CPU7                10,845 context-switches                                              (100.00%)
CPU0                   167 cpu-migrations            #    0.001 K/sec                    (100.00%)
CPU1                    80 cpu-migrations                                                (100.00%)
CPU2                   165 cpu-migrations                                                (100.00%)
CPU3                   139 cpu-migrations                                                (100.00%)
CPU4                   136 cpu-migrations                                                (100.00%)
CPU5                   175 cpu-migrations                                                (100.00%)
CPU6                   256 cpu-migrations                                                (100.00%)
CPU7                   195 cpu-migrations                                                (100.00%)

左の列は特定のCPUインデックスで、右端の列はCPUの使用率です。--no-aggrオプションを指定しない場合、結果は一緒に集計されます。この--pid=pidオプションは、実行中のプロセスを監視する場合に役立ちます。

より多くの分類された情報を表示する-a --per-coreかどうか-a perf-socketも試してください。

の使用法の詳細はperf stat、このチュートリアルで見ることができます:perf cpu statisticperf help stat、オプションの意味に役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.