LINUX.ORG.RU
решено ФорумAdmin

информация о работе процессора


0

1

Хочу написать демона который будет вести статистику на сервере по количеству подключений, загруженности оперативки\свапа и нагрузке на процессор.
количество подключений беру из netstat, оперативку и свап из /proc/meminfo

подскажите откуда брать информацию о работе процессора?

★★★★★

>> подскажите откуда брать информацию о работе процессора?

/proc/stat

Ты не atop изобретаешь?

GotF ★★★★★
()
Ответ на: комментарий от GotF

atop сильно навороченный и не совсем то что нужно. мне проще на перле несколько строк написать и собрать только то что нужно + ещё нужно будет вывод сервера из screen вытаскивать.

/proc/stat

как то там всё запутано, а есть ещё варианты?

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

как то там всё запутано

Здесь когда-то видел тему с подробным разъяснением и формулами расчёта, поищи.

есть ещё варианты?

Парсить вывод top. В мане описаны нужные для этого опции.

GotF ★★★★★
()
Ответ на: комментарий от Othniel

я понимаю что есть куча систем по учёту трафика, нагрузке на комп... с графическим интерфейсом, кучей модулей, параметров, возможностью работать с базой данных.

только если всё это нужно поставить, настроить... + доп нагрузка + не факт что будет то что мне нужно.

а скрипт на перле уже написан и работает как часы.)

TDrive ★★★★★
() автор топика
Ответ на: комментарий от Othniel

вот:

#!/usr/bin/perl
use strict;


my $MemTotal = `cat /proc/meminfo | grep 'MemTotal'`;
my $MemFree = `cat /proc/meminfo | grep 'MemFree'`;
my $SwapTotal = `cat /proc/meminfo | grep 'SwapTotal'`;
my $SwapFree = `cat /proc/meminfo | grep 'SwapFree'`;
$SwapTotal =~ m/([0-9]+)/;
$SwapTotal = $1;
$SwapFree =~ m/([0-9]+)/;
$SwapFree = $1;
$MemTotal =~ m/([0-9]+)/;
$MemTotal = $1;
$MemFree =~ m/([0-9]+)/;
$MemFree = $1;

my $MemUsed = int(($MemTotal - $MemFree + $SwapTotal - $SwapFree)/1024);

my @netstat = `netstat | grep 'x.x.x.x:yy'`; #x.x.x.x:yyy -адрес сервака и порт
my $online = @netstat; 



my $U0 = `cat /proc/stat | grep 'cpu0' | cut -f 2 -d ' '`;
my $N0 = `cat /proc/stat | grep 'cpu0' | cut -f 4 -d ' '`;
my $S0 = `cat /proc/stat | grep 'cpu0' | cut -f 5 -d ' '`;
my $I0 = `cat /proc/stat | grep 'cpu0' | cut -f 6 -d ' '`;

sleep(5);

my $U1 = `cat /proc/stat | grep 'cpu0' | cut -f 2 -d ' '`;
my $N1 = `cat /proc/stat | grep 'cpu0' | cut -f 4 -d ' '`;
my $S1 = `cat /proc/stat | grep 'cpu0' | cut -f 5 -d ' '`;
my $I1 = `cat /proc/stat | grep 'cpu0' | cut -f 6 -d ' '`;

my $Ud = $U1 - $U0;
my $Nd = $N1 - $N0;
my $Sd = $S1 - $S0;



my $CPU = int(100 * ($Ud + $Nd + $Sd)/($Ud + $Nd + $Sd + $Id));

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
my $out="[".$hour.":".$min."] online: ".$online." Mem: ".$MemUsed."Mb "." CPU:".$CPU."%\n";
print $out;

в формуле расчёта нагрузке на CPU не уверен но в сравнение с выводом top похоже.
как выводить данные тоже ещё думаю появилась идея сделать вывод удобным для Exel чтоб график построить.
и вот не определился сделать его в цикле с паузами или через крон запускать

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

В цикле с паузами. Я поковырять не смогу, Линукса рядом нет. Завтра гляну, может что дополню :) Судя по /proc скрипт Линукс-онли?

Othniel
()
Ответ на: комментарий от Othniel

ошибку нашел. вместо


my $U0 = `cat /proc/stat | grep 'cpu0' | cut -f 2 -d ' '`;
my $N0 = `cat /proc/stat | grep 'cpu0' | cut -f 4 -d ' '`;
my $S0 = `cat /proc/stat | grep 'cpu0' | cut -f 5 -d ' '`;
my $I0 = `cat /proc/stat | grep 'cpu0' | cut -f 6 -d ' '`;

sleep(5);

my $U1 = `cat /proc/stat | grep 'cpu0' | cut -f 2 -d ' '`;
my $N1 = `cat /proc/stat | grep 'cpu0' | cut -f 4 -d ' '`;
my $S1 = `cat /proc/stat | grep 'cpu0' | cut -f 5 -d ' '`;
my $I1 = `cat /proc/stat | grep 'cpu0' | cut -f 6 -d ' '`;
нужно

my $U0 = `cat /proc/stat | grep 'cpu0' | cut -f 2 -d ' '`;
my $N0 = `cat /proc/stat | grep 'cpu0' | cut -f 3 -d ' '`;
my $S0 = `cat /proc/stat | grep 'cpu0' | cut -f 4 -d ' '`;
my $I0 = `cat /proc/stat | grep 'cpu0' | cut -f 5 -d ' '`;

sleep(5);

my $U1 = `cat /proc/stat | grep 'cpu0' | cut -f 2 -d ' '`;
my $N1 = `cat /proc/stat | grep 'cpu0' | cut -f 3 -d ' '`;
my $S1 = `cat /proc/stat | grep 'cpu0' | cut -f 4 -d ' '`;
my $I1 = `cat /proc/stat | grep 'cpu0' | cut -f 5 -d ' '`;

вот нашел норм описание /proc/stat
http://www.linuxhowtos.org/System/procstat.htm

числа в строчке cpu с лева на право

user: normal processes executing in user mode
nice: niced processes executing in user mode
system: processes executing in kernel mode
idle: twiddling thumbs
iowait: waiting for I/O to complete
irq: servicing interrupts
softirq: servicing softirqs

там числа это что то типо тактов процессора, какое то внутреннее измерение времени работы.

idle: twiddling thumbs - время простоя процессора

(user+nice+system)/(user+nice+system+idle)
получается отношение времени работы процессора к общему времени с момента загрузки.
вот не знаю нужно в формулу прикрутить например iowait ? когда cpu ожидает ввод-вывод он другими процессами занимается или тупит?

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

>Судя по /proc скрипт Линукс-онли?
не знаю как на других *nix дела с proc

ну я для себя написал.

в крайнем случае можно top парсить или аналоги но это не спортивно)

TDrive ★★★★★
() автор топика
Ответ на: комментарий от xpahos

>а еще есть такая вещь, как snmp

И mrtg, который способен собирать из него любые данные и строить по ним графики. Что еще надо?

NowhereMan
()
Ответ на: комментарий от NowhereMan

нужно чтобы заходил в screen вводил команду и вытаскивал вывод списка игроков на сервере по никнеймам. snmp умеет?

TDrive ★★★★★
() автор топика
Ответ на: комментарий от TDrive

нужно чтобы заходил в screen вводил команду и вытаскивал вывод списка игроков на сервере по никнеймам. snmp умеет?

Умеет. Создайте свои MIB/OID и все будет.

xpahos ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.