CPU 점유율 구하기..

toughguy의 이미지

안녕하세요,
오늘 날씨 무지하게 덥군요, ㅡㅡ;;;

다름이 아니라, CPU 점유율을 구하고 싶은데,

Top 을 사용하자니 Delay가 있고, /proc/stat 파일을 사용하자니, 뭔가 부정확 한거 같기도 하고,,시스템에 따라 차이가 있을꺼 같고..

딱 현재 CPU 점유율이 나오게 했음 하는데,
좋은 방법이 없을까요~?

어느 시스템에도 적용이되는 universal 한 방법..ㅠ_ㅠ

고수 여러분의 도움을 요청합니다.

khiny의 이미지

os에 따라 지원하는 api가 틀릴텐데 어느 시스템에도 적용이되는 universal한 방법이 있을까요?

toughguy의 이미지

우선, 대분류로는 , Linux 계열에서만 , 중분류는, RedHat 계열, 소분류는 커널 2.4 버젼 정도..

이정도면 universal 한 방법이 있지 않을까요 ㅡ.ㅡ?

powerson의 이미지


저렇게 분류를 하신거라면 시스템이란 용어는 적합하지 않습니다. 분류를 하셨지만, 시스템에 대한 분류는 아니신거 같습니다.
어쨋든, 답변을 드리면, 어차피 리눅스이니, sysinfo라는 시스템 콜이 있습니다. man sysinfo하시면 자세한 정보가 나올테니 확인해보시면 될거 같습니다.
------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

ssehoony의 이미지

snmp 라는 프로토콜이 있는데
이 프로토콜을 이용해서 구성되어진 net-snmp 라는 서버/클라이언트 모델 프로그램이 있습니다.
여기에 보면 cpu 사용량을 알 수 있는 방법이 있으며
net-snmp 가 컴파일 되는 플랫폼은 동일한 방법으로 접근이 가능하므로
net-snmp 를 사용해서 하시면 되겠네요.
이걸 이용하면 cpu use, cpu load, mem use, disk use, network use 등등 외에 다수를 통일된 방법으로
접근 할 수 있습니다. (사실 snmp 가 그렇게 하기 위해 나온거거든요)

keedi의 이미지

리눅스라면 Perl을 사용해서 다음과 같은 간단한 방법도 사용할 수 있습니다.

1. CPAN의 Sys::Statistics::Linux 모듈 설치
2. 다음을 실행

#!/usr/bin/perl
 
use strict;
use warnings;
 
use Sys::Statistics::Linux;
 
my $lxs = Sys::Statistics::Linux->new( CpuStats => 1, SysInfo => 1 );
my $stats = $lxs->get;
 
# 시스템 정보 출력
my $sysinfo = $stats->{SysInfo};
print "SysInfo\n";
for my $key ( keys %$sysinfo ) {
    print "$key -> $sysinfo->{$key}\n";
}
 
# CPU 관련 정보 출력
my $cpu = $stats->{CpuStats}->{cpu};
print "CpuStats\n";
for my $key ( keys %$cpu ) {
    print "$key -> $cpu->{$key}\n";
}

---------------------------
Smashing Watermelons~!!
Whatever Nevermind~!!

Kim Do-Hyoung Keedi

----
use perl;

Keedi Kim

toughguy의 이미지

^^여러분들의 ~ 답변갑사드립니다

bejoy4him의 이미지

제목 처럼 /proc/stat를 이용하였습니다.

top의 소스를 참고했구요.
top이 /proc/stat 를 이용하더군요.

top소스는 procps 패키지에 포함되어 있더군요.
그 패키지 안에 ps, top등등의 소스가 많은데 그 중에서 top.c top.h를 참고해서 살펴보시기 바랍니다.

/proc/stat 파일안에 CPU별 load 정보, 토탈 load정보가 텍스트 형식으로 담겨 있습니다.
물론 그 load정보는 틱 카운트로 표시되어 있으니 해석 잘 하시구요..

구하는 방법
현재 읽어온 전체 틱 카운트에서 이전에 읽어둔 전체 틱카운트를 뺀다(총 틱 카운트 증가량)
전체에서 idle 틱 카운트를 뺀 틱 카운트를 구한다. 그리고 이전에 구한 "전체에서 idle 틱 카운트를 뺀 틱 카운트"를 뺀다(load 틱 카운트 증가량)

CPU Load = 100 * "load 틱 카운트 증가량" / "총 틱 카운트 증가량"

이렇게 하면 되겠네요.
단 시간 간격은 3초 이상으로 하시길 바랍니다. 3초 이내면 CPU Load가 너무 들쭉 날쭉으로 표시되더군요.
이 방법은 Redhat9.0부터 RHEL4까지 모두 가능하였습니다.(물론 약간의 차이는 있습니다.)

toughguy의 이미지

저도 처음엔 top 소스를 보고,
/proc/stat 를 이용해 보았는데요,

문제는, RealTime 이 아닌, 최소 1초 + @의 시간이 필요하더군요..

이런 저런 정보를 많이 찾아보아도 Delay없이 구할수 있는 방법은 없나 봅니다 ㅠ_ㅜ

여러분의 조언 감사드립니다.

toughguy의 이미지

약간의 꼼수 비슷하긴한데,
pa -aux 하면, 현재 떠있는모든 프로세스에 대한 정보가 나오는데,
세번째 필드인 CPU 사용률을 모두 합하는 스크립트를 통해 구하는건 어떨까요..
약간의 오차는 있겠지만, 제시간에 바로 알수 있을꺼 같은데요..ㅡ.ㅡ

조야의 이미지

short c_us;
int manutd=0,sa=0,j=0;
FILE * tp;
char lines[1024];
char lines1[1024];

tp = popen("ps -eo 'cpu'", "r");
while(fgets(lines, 1024, tp))
{
if (lines[j] != ' ')
{
sscanf(lines, "%s", lines1);
sa = atoi(lines1);
if(sa != 0){
manutd = manutd+sa;
}
}
j++;
}

c_us = (short)manutd;
c_us = c_us * 100;
pclose(tp);

이렇게 해볼수 있어요..

구라송의 이미지

top -b -n1|sed -n 6p|awk '{print $8}'

73.0%

이런식으로 나오죠..

구라송의 이미지

top -b -n1|sed -n 6p|awk '{print $8}'

cpu의 idle값만 뽑는겁니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.