Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 Linux 환경에서 메모리 사용량 확인하는 방법

이 글에서는 Linux 환경에서 C++를 사용하여 프로그램의 메모리 사용량 통계를 확인하는 방법을 소개합니다.

프로세스의 메모리 관련 세부 정보는 /proc/self/stat 파일에서 모두 얻을 수 있습니다. 이 파일에는 현재 실행 중인 프로세스에 대한 다양한 커널 통계가 기록되어 있으며, 여기서는 그중 가상 메모리(Virtual Memory) 크기와 상주 집합 크기(Resident Set Size, RSS) 두 가지 값을 추출하는 방법을 다룹니다.

  • 가상 메모리(vsize): 프로세스에 할당된 전체 가상 주소 공간의 크기
  • RSS(rss): 실제 물리 메모리(RAM)에 올라와 있는 페이지의 수

예제 코드

#include <unistd.h>
#include <ios>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

void mem_usage(double& vm_usage, double& resident_set) {
    vm_usage = 0.0;
    resident_set = 0.0;

    // proc 디렉터리에서 프로세스 정보 가져오기
    ifstream stat_stream("/proc/self/stat", ios_base::in);

    // 정보를 담을 변수들 선언
    string pid, comm, state, ppid, pgrp, session, tty_nr;
    string tpgid, flags, minflt, cminflt, majflt, cmajflt;
    string utime, stime, cutime, cstime, priority, nice;
    string O, itrealvalue, starttime;

    unsigned long vsize;  // 가상 메모리 크기 (바이트)
    long rss;             // 상주 집합 크기 (페이지 수)

    stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr
        >> tpgid >> flags >> minflt >> cminflt >> majflt >> cmajflt
        >> utime >> stime >> cutime >> cstime >> priority >> nice
        >> O >> itrealvalue >> starttime >> vsize >> rss;  // 나머지 값은 무시

    stat_stream.close();

    long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024; // 시스템 페이지 크기 (KB 단위)
    vm_usage = vsize / 1024.0;          // 바이트 → KB 변환
    resident_set = rss * page_size_kb;  // 페이지 수 × 페이지 크기(KB)
}

int main() {
    double vm, rss;
    mem_usage(vm, rss);
    cout << "Virtual Memory: " << vm << "\nResident set size: " << rss << endl;
}

실행 결과

Virtual Memory: 13272
Resident set size: 1548

코드 핵심 포인트

/proc/self/stat 파일은 공백으로 구분된 여러 필드로 구성되어 있으며, 각 필드에는 PID, 명령 이름, 프로세스 상태 등의 정보가 순서대로 담겨 있습니다. 필요 없는 앞부분의 필드들은 문자열 변수로 받아 흘려보내고, 실제로 필요한 vsizerss 값만 숫자형으로 읽어 들입니다.

sysconf(_SC_PAGE_SIZE) 함수를 호출하면 시스템의 메모리 페이지 크기를 바이트 단위로 얻을 수 있습니다. 이 값을 1024로 나누면 KB 단위 페이지 크기가 되고, 여기에 RSS(페이지 수)를 곱하면 실제 물리 메모리 사용량을 KB 단위로 계산할 수 있습니다.