10

Linuxでの負荷平均を見つけるには、linux/kernel.hを含むsys/sysinfo.hを使用します。ここで、次の構造が定義されています。

struct sysinfo {
long uptime;            /* Seconds since boot */
unsigned long loads[3];     /* 1, 5, and 15 minute load averages */
unsigned long totalram;     /* Total usable main memory size */
unsigned long freeram;      /* Available memory size */
unsigned long sharedram;    /* Amount of shared memory */
unsigned long bufferram;    /* Memory used by buffers */
unsigned long totalswap;    /* Total swap space size */
unsigned long freeswap;     /* swap space still available */
unsigned short procs;       /* Number of current processes */
unsigned short pad;     /* explicit padding for m68k */
unsigned long totalhigh;    /* Total high memory size */
unsigned long freehigh;     /* Available high memory size */
unsigned int mem_unit;      /* Memory unit size in bytes */
char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */
};

しかし、それは本当の負荷を与えないと思います。

出力:2552402、3214049236、134513148

この値はどういう意味ですか?

uptime次のコマンドを使用して、現在の負荷を見つけることができます。

$uptime
13:00:14 up 35 min,  2 users,  load average: 1.07, 0.95, 0.80

上記の2つの出力の間に接続が見つかりません。


インターネットで検索しました。これは、2 ^ 16(65536)で割ることを意味します。そして私もそれを試しました。(または、SI_LOAD_SHIFT、つまり1<<SI_LOAD_SHIFTでシフト1を実行します。65536=1<< 16であるため)

私は4つのi3-2120プロセッサを搭載したコンピュータを使用しています。'upitime'の出力は、CPUの数と関係があります。ウィキペディアload_average

4

3 に答える 3

3

負荷平均は、固定小数点演算で表されます。関連する定数については、こちらを参照してください。最後の FSHIFT ビットが小数部分を表すために使用されていることがわかります。負荷平均を取得するには、 /proc/loadavgのようにいつでも実行できます。

于 2012-09-06T15:52:05.327 に答える
0

私は解決策を得ました。

sysinfo(&sysinfo_obj)関数を呼び出すのを忘れていました。

于 2012-09-13T10:25:13.387 に答える