The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как узнать загруженность процессора и инфу о памяти?"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

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

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как узнать загруженность процессора и инфу о памяти?"  +/
Сообщение от jd (??) on 08-Дек-07, 06:38 
Судя по тому, что система не указана, видимо это GNU/Linux. Тогда по памяти: /proc/meminfo
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Как узнать загруженность процессора и инфу о памяти?"  +/
Сообщение от ufobject email(ok) on 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

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

9. "Как узнать загруженность процессора и инфу о памяти?"  +/
Сообщение от angra (ok) on 11-Дек-07, 18:53 
>Будет ли это более корректным результатом? Или мне еще что то
>учесть нужно?

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


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4. "Как узнать загруженность процессора и инфу о памяти?"  +/
Сообщение от Hordi email on 10-Дек-07, 13:04 
Есть еще такое:

#include <sys/sysinfo.h>

struct sysinfo si;
sysinfo(&si);

si.totalram
si.totalswap

и т.п.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

5. "Как узнать загруженность процессора и инфу о памяти?"  +/
Сообщение от phpcoder email(??) on 10-Дек-07, 14:21 
Можно посмотреть как это сделано в докапах wmcpuload и wmmemload.


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

6. "Как узнать загруженность процессора и инфу о памяти?"  +/
Сообщение от ufobject email(ok) on 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 (к примеру) вывод происходит не чаще, чем если я просто ничего не делаю. Может кто пояснит мне что можно с этим сделать и как довести до ума, чтоб видеть процент загрузки или свободных ресурсов процессора?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

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

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру