皆さん!
CPUログを継続的に確認したい。 topコマンドとhtopコマンドを使用しました。ただし、シミュレーション中にチェックするだけです。
今、私は実際のロボットを約2時間実行したいと思っています(私のラップトップは移動中はロボットに乗っています)。
2番目に、GPU(AMDグラフィックスカード)のパフォーマンスもチェックしました。しかし、どのようにログファイルを作成できますか?
記録するさまざまな統計を選択できます。
簡単にするために、次の回答と同様の平均負荷係数を使用してこの回答を作成します。 CPU負荷をログに記録する方法
次のような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
コマンドを使用してus、sy、idおよび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
自分でスクリプトを書くのではなく、 collectl を使用し、おそらく graphite および grafana と組み合わせて結果を視覚化することができます。
Collectlウェブサイトから:
パフォーマンスデータが必要な場合が何度もあります。これには、ベンチマーク、システムの全般的な状態の監視、または過去のある時点でシステムが何をしていたかを判断することが含まれます。何をしているのかに応じて、多くの場合、特定の状況に合わせて設計されたさまざまなツールを使用することになります。
統計の小さなセットに焦点を合わせ、出力を一方向にのみフォーマットし、双方向ではなく、両方ではなくデーモンとして実行するほとんどの監視ツールとは異なり、collectlはすべてを実行しようとします。現在、buddyinfo、cpu、disk、inode、infiniband、lustre、memory、network、nfs、processes、quadrics、slabs、socket、tcpを含む広範なサブシステムのセットを監視することを選択できます。
Collectl出力は、後で再生するためにログのローリングセットに保存したり、さまざまな形式でインタラクティブに表示したりすることもできます。それだけでは不十分な場合は、データを代替形式で報告したり、ソケットを介して神経節やグラファイトなどのリモートツールに送信したりできるプラグインがあります。 gnuplotなどの外部パッケージでプロットするために、スペースで区切られた形式でファイルを作成することもできます。