getrusage 시스템 호출: "최대 상주 세트 크기"란 무엇입니까?

getrusage 시스템 호출: "최대 상주 세트 크기"란 무엇입니까?

man getrusage 2설명하다

ru_maxrss (since Linux 2.6.32)
              This is the maximum resident set size used (in kilobytes). For RUSAGE_CHILDREN, this is the resident set size of the largest
              child, not the maximum resident set size of the process tree.

그렇다면 이 숫자는 실제로 무엇을 의미하는가?

답변1

프로세스의 상주 세트 크기는 프로세스에 속하고 현재 RAM(스왑되지 않거나 비상주하는 실제 RAM)에 존재(상주)하는 메모리의 양입니다.

예를 들어, 프로세스가 메모리 블록(예: 100Mb)을 할당하고 이를 적극적으로 사용(읽기/쓰기)하는 경우 상주 세트 크기는 약 100Mb(오버헤드, 코드 세그먼트 등 포함)가 됩니다. 프로세스가 일정 기간 동안 해당 메모리 사용을 중지하는 경우(해제하지 않음) 운영 체제는 해당 메모리 블록을 교체하여 다른 프로세스(또는 캐시)를 위한 공간을 확보할 수 있습니다. 그러면 상주 세트 크기는 교체된 코어 수만큼 줄어듭니다. 프로세스가 깨어나 해당 메모리를 재사용하기 시작하면 커널은 스왑 영역에서 데이터를 다시 로드하고 상주 세트 크기는 다시 증가합니다.

ru_maxrss필드는 struct rusage상주 세트 크기에 대한 "하이 워터 마크"입니다. 이는 이 프로세스의 최대 RAM 사용량(사용 중)을 나타냅니다 RUSAGE_SELF.

프로세스의 상주 세트 크기를 제한하여 단일 응용 프로그램이 시스템의 모든 RAM을 "사용"하고 다른 응용 프로그램을 강제로 교체(또는 메모리 부족으로 인해 완전히 실패)하는 것을 방지할 수 있습니다.

관련 정보