web-dev-qa-db-ja.com

CPUログまたはGPU使用値を保存する方法は?

皆さん!

CPUログを継続的に確認したい。 topコマンドとhtopコマンドを使用しました。ただし、シミュレーション中にチェックするだけです。

今、私は実際のロボットを約2時間実行したいと思っています(私のラップトップは移動中はロボットに乗っています)。

それでは、後でアクセスできるように、すべてのレコードをログファイルに保存する方法を教えてください。

2番目に、GPU(AMDグラフィックスカード)のパフォーマンスもチェックしました。しかし、どのようにログファイルを作成できますか?

2

最初に、記録するCPU統計を決定します

記録するさまざまな統計を選択できます。

  • CPU速度(MhzまたはGhzの周波数)
  • CPU使用率
  • CPU温度
  • CPU平均負荷率
  • さらに、これらの統計はCPUごとにセグメント化できます。つまり、クアッドコアハイパースレッドCPUの場合は#1〜#8です。

簡単にするために、次の回答と同様の平均負荷係数を使用してこの回答を作成します。 CPU負荷をログに記録する方法

毎秒2時間のログを記録するループを作成する

次のような7,200秒(2時間)をループするには、bashスクリプトが必要です。

#!/bin/bash

for ((i=0; i<7200; i++))
do
    uptime >> /home/user/cpuload.log
    sleep 1
done

スプレッドシートのデータを解析する

出力を確認するには、次のコマンドを使用します。

$ cat cpuload.log
 20:04:06 up 2 days, 14 min,  1 user,  load average: 1.39, 1.12, 0.95

負荷平均は、最後の1分間、最後の5分間、最後の15分間の3つの変数を報告しています。簡単にするために、ループの1秒ごとに報告される直前の負荷平均のみを考慮してください。

ファイルcpuload.logをスプレッドシートにインポートして、2時間のデータポイントをグラフ化するか、単にデータをスクロールします。 Libre Office Calcを使用していますが、最新のスプレッドシートはすべてファイルをインポートできます。

負荷平均に関する簡単なポイント

上記の例では、1分間の負荷平均は1.39です。 .70を超える値は調査に値し、1.00はボトルネックがあり、プロセスが処理されずに待機する必要があることを意味するため、これは危険なほど高く見えます。

ただし、スプレッドシートでは、負荷平均を使用しているCPUの数で割る必要があります。これをすばやく見つけるには、次のコマンドを使用します。

$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
2074968
2133093
2094750
1863843
1728562
1855875
1849125
1778156

これは、8つのCPUがあることを示しています(1200 Mhzから3400 Mhzを実行するクアッドコアハイパースレッドIntel i-7 3630QMラップトップCPUです)。このスナップショットでは、CPU#1(内部的にCPU0と呼ばれる)は2,0749.68 Mhzで実行され、CPU#8は1,7781.56 Mhzで実行されています。ただし、重要なことは、8個のCPUがいくつあるかをカウントすることです。

したがって、負荷平均1.39を8で除算すると、TRUE負荷平均は0.17になり、非常に優れています。もう一度0.70を超える値は調査に値し、1.00に達するとシステムが停止します。さらに読むことができます here


topコマンドを使用して上位10プロセスを表示する

topコマンドを使用して、最もリソースを消費する10個のプロセスを表示するには、uptimeコマンドの代わりに次のコマンドを使用します。

top -n 1 -b | head -n 17 | tail -n 10 >> /home/user/top10.log

ファイル/home/user/top10.logは次のようになります(1秒ごとに2時間繰り返されます)。

$ top -n 1 -b | head -n 17 | tail -n 10
 6170 rick      20   0 1437432 537000 126060 S  62.5  6.7   8:50.24 chrome
 2466 rick      20   0 1210040 140568  61864 S   6.2  1.8  22:16.88 compiz
 4111 rick      20   0  742396 248724 185820 S   6.2  3.1  36:26.68 chrome
 6280 rick      20   0   41800   3668   3124 R   6.2  0.0   0:00.01 top
10096 root      20   0       0      0      0 S   6.2  0.0   0:00.47 kworker/0:2
    1 root      20   0  120064   6244   4000 S   0.0  0.1   0:02.23 systemd
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.05 kthreadd
    3 root      20   0       0      0      0 S   0.0  0.0   0:01.31 ksoftirqd/0
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:+
    7 root      20   0       0      0      0 S   0.0  0.0   1:39.28 rcu_sched

注:userを実際のユーザー名に置き換えます。


topコマンドを使用してussyidおよびsiCPU値

最初のセクションと同様に、7200秒ループするbashスクリプトを作成します。

#!/bin/bash

# NAME: ~/bin/cpu-top-summary
# DATE: June 13, 2017
# DESC: Call `top` command every second to obtain CPU(s) stats for
#       us, sy, ni, id, wa, hi, si, and st. Log to /tmp/top-cpu-summary.log
#       with time stamp in hh:mm:ss 24 hour format.
# PARM: $1 number of seconds to run, ie 2 hours = 7200

now="$(date +'%d/%m/%Y')"
printf "top CPU(s) summary for %s\n" "$now" > /tmp/top-cpu-summary.log
for ((i=0; i<$1; i++))
do
    TimeStamp=`date +"%H:%M:%S"`
    printf "$TimeStamp - " >> /tmp/top-cpu-summary.log
    top -n 1 -b | head -n 3 | tail -n 1 >> /tmp/top-cpu-summary.log
    sleep 1
done

top-cpu-summary 10を使用してbashスクリプトを呼び出すと、次を使用して10秒間の出力を確認できます。

$ cat /tmp/top*
top CPU(s) summary for 13/06/2017
19:17:34 - %Cpu(s): 25.0 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:35 - %Cpu(s): 25.0 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:36 - %Cpu(s): 25.0 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:37 - %Cpu(s): 25.0 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:38 - %Cpu(s): 25.0 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:39 - %Cpu(s): 25.0 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:41 - %Cpu(s): 25.0 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:42 - %Cpu(s): 24.9 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:43 - %Cpu(s): 24.9 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
19:17:44 - %Cpu(s): 24.9 us,  9.2 sy,  0.0 ni, 65.4 id,  0.2 wa,  0.0 hi,  0.2 si,  0.0 st
2

自分でスクリプトを書くのではなく、 collectl を使用し、おそらく graphite および grafana と組み合わせて結果を視覚化することができます。

Collectlウェブサイトから:

パフォーマンスデータが必要な場合が何度もあります。これには、ベンチマーク、システムの全般的な状態の監視、または過去のある時点でシステムが何をしていたかを判断することが含まれます。何をしているのかに応じて、多くの場合、特定の状況に合わせて設計されたさまざまなツールを使用することになります。

統計の小さなセットに焦点を合わせ、出力を一方向にのみフォーマットし、双方向ではなく、両方ではなくデーモンとして実行するほとんどの監視ツールとは異なり、collectlはすべてを実行しようとします。現在、buddyinfo、cpu、disk、inode、infiniband、lustre、memory、network、nfs、processes、quadrics、slabs、socket、tcpを含む広範なサブシステムのセットを監視することを選択できます。

Collectl出力は、後で再生するためにログのローリングセットに保存したり、さまざまな形式でインタラクティブに表示したりすることもできます。それだけでは不十分な場合は、データを代替形式で報告したり、ソケットを介して神経節やグラファイトなどのリモートツールに送信したりできるプラグインがあります。 gnuplotなどの外部パッケージでプロットするために、スペースで区切られた形式でファイルを作成することもできます。

1
nickcrabtree