URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7090
[ Назад ]

Исходное сообщение
"CPU usage, Memory usage"

Отправлено xfree86 , 09-Янв-08 17:03 
Привет!
Мне очень нужно получить в своей программе загрузку процессора и памяти...
Может кто-то уже имеет подобный код? (С++)
Так же подойдет скрипт баш, который нормально это выдергивает из необходимых утилит...

Спасибо большое...
Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен


Содержание

Сообщения в этом обсуждении
"CPU usage, Memory usage"
Отправлено vic , 09-Янв-08 19:25 
>Привет!
>Мне очень нужно получить в своей программе загрузку процессора и памяти...
>Может кто-то уже имеет подобный код? (С++)

man getrusage()

>Так же подойдет скрипт баш, который нормально это выдергивает из необходимых утилит...

cat /proc/self/status
cat /proc/<id_process>/status
ps aux | grep <name_process>
time <name_program>
top -n1 | grep <name_program>

>
>
>Спасибо большое...
>Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>


"CPU usage, Memory usage"
Отправлено xfree86 , 10-Янв-08 11:18 
>[оверквотинг удален]
>cat /proc/<id_process>/status
>ps aux | grep <name_process>
>time <name_program>
>top -n1 | grep <name_program>
>
>>
>>
>>Спасибо большое...
>>Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>>

Мне нужна не отдельного процесса, а загрузка вцелом...
в процентах (желательно)


"CPU usage, Memory usage"
Отправлено vic , 10-Янв-08 12:29 
>[оверквотинг удален]
>>top -n1 | grep <name_program>
>>
>>>
>>>
>>>Спасибо большое...
>>>Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>>>
>
>Мне нужна не отдельного процесса, а загрузка вцелом...
>в процентах (желательно)

top -n1 | head -4 | tail -2
?


"CPU usage, Memory usage"
Отправлено xfree86 , 10-Янв-08 16:46 
>[оверквотинг удален]
>>>>
>>>>Спасибо большое...
>>>>Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>>>>
>>
>>Мне нужна не отдельного процесса, а загрузка вцелом...
>>в процентах (желательно)
>
>top -n1 | head -4 | tail -2
>?

Спасибо!
То что надо


"CPU usage, Memory usage"
Отправлено xfree86 , 11-Янв-08 13:33 
>[оверквотинг удален]
>>>>
>>>>Спасибо большое...
>>>>Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>>>>
>>
>>Мне нужна не отдельного процесса, а загрузка вцелом...
>>в процентах (желательно)
>
>top -n1 | head -4 | tail -2
>?

top -n1 | head -3 | tail -1
выдает мне вот это
Cpu(s):  4.4%us,  0.3%sy,  0.0%ni, 94.9%id,  0.3%wa,  0.1%hi,  0.0%si,  0.0%st

И выдает мне это постоянно... как бы я не грузил свой процессор...
Может это всетаки что-то не то?
Мне нужна общая загрузка...


"CPU usage, Memory usage"
Отправлено Arifolth , 11-Янв-08 16:27 
>Привет!
>Мне очень нужно получить в своей программе загрузку процессора и памяти...
>Может кто-то уже имеет подобный код? (С++)
>Так же подойдет скрипт баш, который нормально это выдергивает из необходимых утилит...
>
>
>Спасибо большое...
>Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>

посмотрите сурс mpstat


"CPU usage, Memory usage"
Отправлено ufobject , 22-Янв-08 17:03 
>Привет!
>Мне очень нужно получить в своей программе загрузку процессора и памяти...
>Может кто-то уже имеет подобный код? (С++)
>Так же подойдет скрипт баш, который нормально это выдергивает из необходимых утилит...
>
>
>Спасибо большое...
>Извините, если что-то не так сказал, но надеюсь, что общий смысл ясен
>

Сталкивался с такой задачкой. Даю 2 функции.

/* функция возвращает загрузку процессора в процентах независимо от кол-ва ядер (у меня 2 ядра, функция работает корректно)*/
//int getcpuusage(cpu_options *opts)
int getcpuusage()
{
  static int *pid_list;
  static int pids;
  
  static int pre_used, pre_total;
  static int pre_ig_used;
  int usage;
  int cpu, nice, system, idle;
  int used = 0, total = 0;
  int ig_used = 0;
  int i;
  cpu_options *opts;
  opts->ignore_nice = false;
  opts->cpu_number = -1;
  opts->ignore_procs = 0;

    FILE *fp;
    if (!(fp = fopen("/proc/stat", "r"))) {
    perror("can't open /proc/stat");
    exit(1);
    }

    fscanf(fp, "%*s %d %d %d %d", &cpu, &nice, &system, &idle);

#ifdef USE_SMP
    if (opts->cpu_number >= 0) {
    char cpu_name[20];
    if (opts->cpu_number > NR_CPUS - 1) {
        fprintf (stderr, "MAX CPU number that can be running in SMP is %d\n", NR_CPUS - 1);
        exit(1);
    }
    
    for (i = 0; i <= opts->cpu_number; i++) {
        fscanf(fp, "%s %d %d %d %d", cpu_name, &cpu, &nice, &system, &idle);
        if (strncmp(cpu_name, "cpu", 3)){
        fprintf (stderr, "can't find cpu%d!\n", opts->cpu_number);
        exit (1);
        }
    }
    }
#endif /* USE_SMP */

    fclose(fp);
    used = cpu + system;
    if (!opts->ignore_nice)
    used += nice;
    total = cpu + nice + system + idle;

    /* calc CPU usage */
    if ((pre_total == 0) || !(total - pre_total > 0)) {
    usage = 0;
    } else  if (ig_used - pre_ig_used > 0) {
    usage = (100 * (double)(used - pre_used - ig_used + pre_ig_used)) /
        (double)(total - pre_total);
    } else {
    usage = (100 * (double)(used - pre_used)) / (double)(total - pre_total);
    }

    /* save current values for next calculation */
    pre_ig_used = ig_used;
    pre_used = used;
    pre_total = total;

    return usage;
}

/*функция возвращает иформацию о доступной и занятой памяти. */
struct sysinfo getmeminfo ()
/*
  функция возвращает структуру с описнием ресурсов памяти
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 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..
};
*/
{
struct sysinfo si;
sysinfo(&si);
return si;
}
---------------------------------------------------
Что касаемо памяти, тут есть одна проблемка. Linux старается потребить всю свободную память под различные буфера устройств итп. Так что то, что тебе возвратится в структуре в поле freeram не совсем правда. Для того что бы получить реальное кол-во свободной памяти, сделай следующее: freeram - bufferram.