16

Linux で現在または平均のCPU 使用率(マルチプロセッサ環境の場合)を取得するコマンドまたはその他の方法はありますか?

小規模システムで組み込み Linux を使用しています。基本的に、CPU 使用率を判断する必要があります。これにより、CPU 使用率が高い場合は、メイン プロセッサで実行するのではなく、システム内の別のコントローラーに新しいプロセスを迂回させることができます。メイン プロセッサは、より重要なプロセスでビジー状態になる可能性があります。

この質問は単にプロセスの優先順位付けに関するものではありません。他のコントローラーは新しいプロセスを十分に処理できますが、メイン プロセッサーがビジー状態でない場合は、それを実行することをお勧めします。

4

5 に答える 5

27

多くの検索と調整の後の質問への答え:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    long double a[4], b[4], loadavg;
    FILE *fp;
    char dump[50];

    for(;;)
    {
        fp = fopen("/proc/stat","r");
        fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&a[0],&a[1],&a[2],&a[3]);
        fclose(fp);
        sleep(1);

        fp = fopen("/proc/stat","r");
        fscanf(fp,"%*s %Lf %Lf %Lf %Lf",&b[0],&b[1],&b[2],&b[3]);
        fclose(fp);

        loadavg = ((b[0]+b[1]+b[2]) - (a[0]+a[1]+a[2])) / ((b[0]+b[1]+b[2]+b[3]) - (a[0]+a[1]+a[2]+a[3]));
        printf("The current CPU utilization is : %Lf\n",loadavg);
    }

    return(0);
}

システム モニターによって報告された値と同じ値を取得しています。

于 2010-09-23T17:16:37.443 に答える
11
cat /proc/stat

あなたはこのようなものを見るでしょう

cpu  178877 11039 58012 5027374 22025 2616 1298 0 0
cpu0 122532 8808 34213 2438147 10881 1050 448 0 0
cpu1 56344 2230 23799 2589227 11143 1565 850 0 0

最初の 3 つの数値の合計を取り、最初の 4 つの整数の合計で割ります。

最初の 4 つの数字は、ユーザー、ナイス、システム、およびアイドル時間です。

注:これは全体の平均を示しています。自然平均を取りたい場合は、2 つのサンプルを取り、除算の前にそれらを互いに減算する必要があります。

于 2010-09-22T15:09:35.473 に答える
10

/proc/stat値を2回サンプリングし、その間の平均使用率を計算する必要があります。(瞬時の使用率はあまり意味がありません。使用率測定コードは見た目はいつでも実行されるため、シングルコアマシンでは常に100%になります)。

于 2010-09-22T13:41:28.597 に答える
3

/ procファイルシステムには、あらゆる種類の興味深い情報があります。詳細についてはman proc、をご覧ください。

于 2010-09-22T13:02:52.637 に答える
1

利用可能な場合は top を使用してください。非対話モードで使用できます。

top -n 1

特定のものが必要な場合は、その出力を grep してください。正確な詳細は、top コマンドが出力をどのようにフォーマットするかによって異なりますが、たとえば次のようになります。

top -n 1 | grep 'Load'
于 2010-09-22T13:04:35.477 に答える