서버에서 데몬(백그라운드 프로세스,  서비스)로 동작하면서 시스템의 변화를 확인하기 위해서 사용했던 내용으로 리눅스에서 c로 간단하게 구현할 수 있는 방법을 소개한다. 

     

    --- 시스템 관리 함수 관련 글타래 -------------------------------

    1. 시스템 메모리 사용량 확인 : meminfo() 또는 sysinfo()

    2. 프로세스의 리소스 정보 확인 : getrusage()

    3. 파일시스템(저장소) 정보 확인 : fstatvfs()

     --------------------------------------------------------------------

      embeddedclub.net에서 조회수가 많이있는것으로 보아 언젠가는 독자께 도움이 될수 있을 거라 판단하여 게시물을 이동하였다. 

     

     

    1. 시스템 메모리 사용량 확인 

    1.1. meminfo()

    1.1.1. sysnopsis 

    (1) C 기반

    typedef struct {
        long total;
        long free;
        long shared;
        long buffers;
        long cached;
        long swap_total;
        long swap_free;
    } MEMINFO;
    
    meminfo(MEMINFO *);

     

    (2) CPP 기반

    typedef struct {
        long total;
        long free;
        long shared;
        long buffers;
        long cached;
        long swap_total;
        long swap_free;
    } MEMINFO;
    
    extern "C" void meminfo(MEMINFO *);
    meminfo(MEMINFO *);

     

    1.1.2. Description

      meminfo 기능은 Linux /proc/meminfo 파일을 구문 분석하고 C 또는 Fortran 프로그램에서 사용하기 위해 파일에 포함된 메모리 사용 정보를 반환. 

     

    1) 구조체 멤버 정보

    - 멤버 1: 사용 가능한 총 메모리 양.
    - 멤버 2: 사용자메모리(Heap)에서 사용 가능한 메모리 양을
    - 멤버 3: 공유 메모리의 양을 포함하고,
    - 멤버 4: 시스템 버퍼에서 사용하는 메모리 양
    - 멤버 5: 캐시되는 메모리 양
    - 멤버 6 : 스왑 공간의 양
    - 멤버 7 : 잔여 스왑 공간

     

    2) 반환값

     정상적이면 0, 1이면 오류

     

     

    1.2. sysinfo()

      meminfo()의 경우 시스템 버전에 때라 사용되지 않는 경우가 있다. 그런경우 sysinfo()를 이용하여 meminfo()의 기능을 대신할 수 있다. 

     

    1.2.1. sysnopsis 

    1) 함수원형

    #include <sys/sysinfo.h>
    
    int sysinfo(struct sysinfo *info)

     

    2) 구조체 

    struct sysinfo {
        long uptime;            
        unsigned long totalram;   
        unsigned long freeram;    
        unsigned long sharedram;   
        unsigned long bufferram;  
        unsigned long totalswap;   
        unsigned long freeswap;   
        unsigned short procs;    
        char _f[22];               
    };

     

    1.2.2. Description

    1) 구조체 멤버정보

      sysinfo() 는 전체적인 시스템 통계 정보를 가져오기 위해서 사용한다. 가져온 정보는 struct sysinfo 에 채워진다.
    struct sysinfo 는 다음과 같은 멤버변수를 가진다.

    uptime : 부팅 이후 지나간 초단위 시간
    totalram : 사용할 수 있는 총 메모리 크기
    freeram : 이용할 수 있는 메모리 크기
    sharedram : 공유 메모리의 양
    bufferram : 버퍼에 의해 사용된 메모리
    totalswap : 총 스왑 공간의 크기
    freeswap : 이용할 수 있는 스왑 공간
    procs : 현재 프로세스의 수
    char _f[22] : 구조체를 64 bytes로 채운다(pad)

     

    2) 반환값

      성공시 0, 실패하면 -1 (이외 여러 오류가 발생할 수 있으며, 일반적으로 EFAULT(errno 코드)가 발생.

     

    1.2.3. 예제

      아래는 sysinfo()의 예시이다. 

    #include <sys/sysinfo.h>
    
    int main(void)
    {
        struct sysinfo info;
        sysinfo(&info); 
    
        printf("load: %d %d %d\n", info.loads[0], info.loads[1], info.loads[2]);
        printf("mem : %d %d %d\n", info.totalram, info.totalram-info.freeram, info.freeram);
    }

     

    도움이 되었길 바란다.

     

    반응형
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기