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

Исходное сообщение
"Как узнать загруженность процессора и инфу о памяти?"

Отправлено ufobject , 07-Дек-07 19:37 
Привет всем!
Народ, подскажите пожалуйста, как узнать о текущей загруженности процессора в процентах и информацию о памяти (сколько всего, сколько свободно...) не прибегая к утилитам. Информация будет обрабатываться в сишной функции. Может кто знает точное место обитания сей инфы (proc файлик прочитать или функция специальная есть может)?
Заранее спасибо!

Содержание

Сообщения в этом обсуждении
"Как узнать загруженность процессора и инфу о памяти?"
Отправлено jd , 08-Дек-07 06:38 
Судя по тому, что система не указана, видимо это GNU/Linux. Тогда по памяти: /proc/meminfo

"Как узнать загруженность процессора и инфу о памяти?"
Отправлено DeadMustdie , 09-Дек-07 15:56 
Зависит от ОС. Под Linux - man proc, под Solaris - man kstat. Про прочие сходу не помню :)


"Как узнать загруженность процессора и инфу о памяти?"
Отправлено ufobject , 10-Дек-07 11:37 
>Зависит от ОС. Под Linux - man proc, под Solaris - man
>kstat. Про прочие сходу не помню :)

Извиняюсь, ОС - линукс (gentoo).
Заглядываю я в файл /proc/meminfo и вот что вижу:

MemTotal:      1031940 kB
MemFree:         51280 kB

MemTotal говорит правду,а вот MemFree чет не совсем правдив ИМХО.
У меня нет такого софта, который может гиг памяти сожрать :/
top показывает такие же результаты:

Mem:   1031940k total,   987416k used,    44524k free,   391284k buffers

может я что то недопонимаю?


"Как узнать загруженность процессора и инфу о памяти?"
Отправлено angra , 10-Дек-07 19:20 
В линуксе неиспользуемая память не простаивает без дела, а используется на различные кеши(ну или если угодно буфера), в общем на ускорение работы с носителями. Как только приложения начнут выжирать память, то размер буферов резко сократится.


"Как узнать загруженность процессора и инфу о памяти?"
Отправлено ufobject , 11-Дек-07 10:39 
>В линуксе неиспользуемая память не простаивает без дела, а используется на различные
>кеши(ну или если угодно буфера), в общем на ускорение работы с
>носителями. Как только приложения начнут выжирать память, то размер буферов резко
>сократится.

Огромное спасибо за подсказку. В описанном, я вижу небольшую проблему в решении моей задачи. Мне необходимо знать сколько ресурсов на машине для того, что бы принимать решение о запуске или отказе в запуске нового достаточно ресурсоемкого приложения (чтоб сервант совсем не удушить). А тут получается что по запросу свободной памяти, я буду получать 50Мб, хотя запущена только одна консоль без иксов и с несколькими мелкими сервисами... Могу ли я просто приплюсовывать к полученным результатам (50Мб) размеры всех буферов? Будет ли это более корректным результатом? Или мне еще что то учесть нужно?


"Как узнать загруженность процессора и инфу о памяти?"
Отправлено angra , 11-Дек-07 18:53 
>Будет ли это более корректным результатом? Или мне еще что то
>учесть нужно?

Я бы оставил некоторый запас, однако его размер зависит от общего количества памяти и интенсивности дисковых операций. Попробуйте временно отключить своп(ну или просто следите и за его заполненостью), сделать небольшую программу, которая равномерно кушает память и посмотреть при каком размере кеша система все еще нормально работает под стандартной нагрузкой.



"Как узнать загруженность процессора и инфу о памяти?"
Отправлено ufobject , 14-Дек-07 11:33 
>>Будет ли это более корректным результатом? Или мне еще что то
>>учесть нужно?
>
>Я бы оставил некоторый запас, однако его размер зависит от общего количества
>памяти и интенсивности дисковых операций. Попробуйте временно отключить своп(ну или просто
>следите и за его заполненостью), сделать небольшую программу, которая равномерно кушает
>память и посмотреть при каком размере кеша система все еще нормально
>работает под стандартной нагрузкой.

Спасибо огромное за помощь. Я так и сделаю


"Как узнать загруженность процессора и инфу о памяти?"
Отправлено Hordi , 10-Дек-07 13:04 
Есть еще такое:

#include <sys/sysinfo.h>

struct sysinfo si;
sysinfo(&si);

si.totalram
si.totalswap

и т.п.


"Как узнать загруженность процессора и инфу о памяти?"
Отправлено phpcoder , 10-Дек-07 14:21 
Можно посмотреть как это сделано в докапах wmcpuload и wmmemload.



"Как узнать загруженность процессора и инфу о памяти?"
Отправлено ufobject , 10-Дек-07 14:34 
>Можно посмотреть как это сделано в докапах wmcpuload и wmmemload.

Выдернул я из доков по ядру пример сишного кода, как смотреть загрузку проца, прицепил туда и описанный выше пример с структурой sysinfo и добавил вывод. Вот что получилось:

/*
компиляция gcc -o sinfo source.c
*/
#include <time.h>
#include <limits.h>
#include <signal.h>
#include <sys/time.h>
#include <stdio.h>
#include <sys/sysinfo.h>
#define HIST 10


struct sysinfo getmeminfo ()
{
struct sysinfo si;
sysinfo(&si);

return si;
}

static volatile sig_atomic_t stop;

static void sighandler (int signr)
{
     (void) signr;
     stop = 1;
}
static unsigned long hog (unsigned long niters)
{
     stop = 0;
     while (!stop && --niters);
     return niters;
}
int main (void)
{
     int i;
     struct itimerval it = { .it_interval = { .tv_sec = 0, .tv_usec = 1 },
                             .it_value = { .tv_sec = 0, .tv_usec = 1 } };
     struct sysinfo sf;
     sigset_t set;
     unsigned long v[HIST];
     unsigned long res;
     double tmp = 0.0;
     unsigned long n;
     signal (SIGALRM, &sighandler);
     setitimer (ITIMER_REAL, &it, NULL);
     unsigned long tm,fm; //total mem and free mem info


     hog (ULONG_MAX);
     for (i = 0; i < HIST; ++i) v[i] = ULONG_MAX - hog (ULONG_MAX);
     for (i = 0; i < HIST; ++i) tmp += v[i];
     tmp /= HIST;
     n = tmp - (tmp / 3.0);

     sigemptyset (&set);
     sigaddset (&set, SIGALRM);

     for (;;) {
    
     res=hog(n);
     if (res) {
           printf("%ld\n",res);

     }
         sigwait (&set, &i);
     if (res) {
       sf = getmeminfo();
       printf("total mem: %ld\nfree mem: %ld\n",sf.totalram,sf.freeram);
     }    
     }
     return 0;
}

в итоге получаю следующие результаты: информацию о памяти выводит корректно, а вот с что творится с загрузкой процессора, ума не приложу. Происходит это след. образом: вывод неких циферок, информирующих непонятно каким образом о загрузке камня, происходит по не менее непонятным событиям. Я запускаю locate -u (к примеру) вывод происходит не чаще, чем если я просто ничего не делаю. Может кто пояснит мне что можно с этим сделать и как довести до ума, чтоб видеть процент загрузки или свободных ресурсов процессора?


"Как узнать загруженность процессора и инфу о памяти?"
Отправлено Влаб , 13-Май-10 11:56 
>Привет всем!
>Народ, подскажите пожалуйста, как узнать о текущей загруженности процессора в процентах и
>информацию о памяти (сколько всего, сколько свободно...) не прибегая к утилитам.
>Информация будет обрабатываться в сишной функции. Может кто знает точное место
>обитания сей инфы (proc файлик прочитать или функция специальная есть может)?
>
>Заранее спасибо!