Smem으로 Linux RAM 사용량을 쉽게 이해

게시 됨: 2022-01-29
빨간색 배경 위에 Bash 셸 로고가 표시된 노트북 화면
팻마와티 아흐마드 자누리/Shutterstock

Linux 메모리 사용량은 해석하기 어렵고 이해하기 어려울 수 있습니다. smem 을 사용하면 프로세스가 어떤 메모리를 사용하고 어떤 프로세스가 가장 많이 사용하는지 쉽게 알 수 있습니다.

메모리 사용량

Linux는 컴퓨터의 RAM에 무슨 일이 일어나고 있는지 확인할 수 있는 여러 가지 방법을 제공합니다. 문제는 메모리 관리가 운영 체제의 복잡한 문제라는 것입니다. 물리적 RAM, 스왑 공간 형태의 가상 RAM, 한 번에 실행되는 다양한 유형의 프로세스 요구 사항을 저글링해야 합니다.

PC 게임을 위해 컴퓨터에 필요한 RAM은 얼마입니까?
관련 PC 게임을 위해 컴퓨터에 얼마나 많은 RAM이 필요합니까?

프로세스는 자신을 메모리에 로드할 때 RAM을 사용합니다. 그런 다음 그들은 수행하도록 설계된 작업을 수행할 공간을 확보하기 위해 더 많은 RAM을 요청합니다. 일부 프로세스는 RAM에 거의 영향을 미치지 않고 다른 프로세스는 메모리를 매우 많이 사용합니다.

커널과 나머지 운영 체제, 데스크탑 환경, 실행하는 모든 응용 프로그램 또는 명령줄 세션은 모두 컴퓨터에 설치된 제한된 RAM 양의 일부를 요구하고 있습니다. 일부 프로세스는 다른 프로세스를 생성합니다. 일부 프로세스는 다른 프로세스와 RAM을 공유합니다.

Linux 터미널에서 메모리 사용량을 확인하는 방법
관련 Linux 터미널에서 메모리 사용량을 확인하는 방법

이 모든 것을 해독하고 "이 프로그램이나 프로세스가 사용하는 RAM은 얼마입니까?"라는 질문에 대한 간단한 답을 찾으려고 합니다. 놀라운 도전이 될 수 있습니다. 세분성은 훌륭하고 그 자리가 있지만 마찬가지로 과도한 정보가 장애가 될 수 있습니다.

광고

예를 들어 cat 을 사용하여 /proc/meminfo 의사 파일 시스템을 들여다보면 이 기사를 조사하는 데 사용된 시스템에서 50줄의 출력이 반환되었습니다. 어디서 시작합니까?

 고양이 /proc/meminfo

그리고 일부 Linux 유틸리티는 다른 답변을 제공합니다. 테스트 머신에서 프로세스 ID가 2183인 less 실행되는 인스턴스가 있었습니다.

-x (확장) 옵션과 함께 pmap 유틸리티를 사용하여 프로세스의 메모리 사용량에 대한 전체 그림을 얻을 수 있습니다. less 인스턴스의 프로세스 ID와 함께 사용합니다.

 피맵 -x 2183 

단일 프로세스의 메모리 맵 쿼리

출력의 맨 아래에는 사용 중인 기본 RAM의 양인 Resident Set Size에 대한 합계가 표시됩니다.

less의 단일 인스턴스에 대한 pmap 출력

그런 다음 -o (출력) 옵션과 함께 ps 유틸리티를 사용하고 RSS 열을 선택하고 less 의 동일한 인스턴스의 프로세스 ID를 전달했습니다.

 추신 -o RSS 2183 

ps를 사용하여 less의 동일한 인스턴스의 RSS 보기

우리는 다른 결과를 얻습니다. 이것은 ps 작성자의 디자인 결정입니다. 이것은 ps man 페이지에서 가져온 것입니다.

SIZE 및 RSS 필드는 페이지 테이블, 커널 스택, struct thread_info 및 struct task_struct를 포함한 프로세스의 일부를 계산하지 않습니다. 이것은 일반적으로 항상 상주하는 최소 20KiB의 메모리입니다. SIZE는 프로세스의 가상 크기입니다(코드+데이터+스택).
광고

다른 유틸리티의 작성자는 RAM 사용량을 측정하는 방법에 대한 자신의 견해를 가지고 있습니다.

RSS, USS 및 PSS

RSS(Resident Set Size)는 스왑 공간을 제외하고 프로세스가 사용하는 공유 라이브러리에 필요한 RAM을 포함하여 프로세스에 할당된 RAM의 양입니다.

컴퓨터의 RAM이 가득 찬 것이 좋은 이유
관련 컴퓨터의 RAM이 가득 찬 것이 좋은 이유

RSS는 거의 항상 RAM 사용량을 초과 보고합니다. 둘 이상의 프로세스가 하나 이상의 공유 라이브러리를 사용하는 경우 RSS는 각 라이브러리의 RAM 사용량을 해당 프로세스 각각의 RAM 사용량에 추가합니다. 여기에는 부정확성과 함께 어떤 아이러니가 있습니다. 공유 라이브러리는 각 프로세스가 라이브러리의 자체 개인 인스턴스를 로드할 필요가 없음을 의미합니다. 라이브러리가 이미 메모리에 있는 경우 해당 라이브러리를 공유하고 RAM 오버헤드를 줄입니다.

비례 설정 크기는 공유 메모리를 공유하는 프로세스 간에 공유 메모리의 양을 나누어 이 문제를 해결하려고 합니다. 일부 메모리를 공유하는 4개의 프로세스가 있는 경우 PSS는 공유 RAM의 25%가 각 프로세스에서 사용된다고 보고합니다. 이것은 근사치이지만 RSS가 그리는 그림보다 진행 상황과 더 유사합니다.

Unique Set Size는 프로세스에서 직접 사용하거나 프로세스에서 단독으로 사용하는 라이브러리에서 사용하는 RAM의 양입니다. 다시 말하지만 스왑 공간을 무시합니다. 실제 물리적 RAM에만 관심이 있습니다.

USS와 PSS는 smem 의 저자 Matt Mackall이 제안한 용어 및 개념입니다.

sm 유틸리티

smem 유틸리티는 프로세스, 사용자, 매핑 또는 시스템 전체에서 사용하는 메모리에 대해 보고합니다. 테스트한 모든 배포판에서 설치가 필요했습니다. Ubuntu에 설치하려면 다음 명령을 사용하십시오.

 sudo apt 설치 smem 

우분투에 smem 설치

Fedora에 smem 을 설치하려면 다음을 입력해야 합니다.

 sudo dnf 설치 smem 

Fedora에 smem 설치

Manjaro에 smem 을 설치하려면 다음을 사용하십시오.

 sudo pacman -Sy smem 

Manjaro에 smem 설치

광고

옵션 없이 smem 을 사용하면 RAM을 사용하는 프로세스 목록이 제공됩니다.

 스템 

명령줄 옵션 없이 smem 호출

터미널 창에 정보 테이블이 표시됩니다.

smem의 기본 출력

열은 다음과 같습니다.

  • PID : 메모리를 사용하는 프로세스의 프로세스 ID입니다.
  • 사용자 : 프로세스를 소유한 사용자의 사용자 이름입니다.
  • 명령 : 프로세스를 시작한 명령줄입니다.
  • Swap : 프로세스가 사용 중인 스왑 공간의 양입니다.
  • USS : 고유한 세트 크기.
  • PSS : 비례 설정 크기.
  • RSS : 상주 세트 크기.

백분율로 표시된 크기를 보려면 -p (백분율) 옵션을 사용하십시오.

 smem -p 

smem -p 옵션을 사용하여 백분율 요청

바이트 단위의 크기는 백분율로 대체되었습니다.

백분율을 보여주는 smem 출력

보다 인간 친화적인 형태로 렌더링된 그림을 보려면 -k (약어) 옵션을 사용하십시오. 이렇게 하면 수치가 줄어들고 단위 표시기가 추가됩니다.

 smem -k 

smem -k 옵션을 사용하여 단위 표시기로 크기 표시

원시 바이트 대신 크기가 메가바이트, 기가바이트 등으로 표시됩니다.

K, M 및 G와 같은 단위 표시기를 사용하여 smem 출력

광고

합계 줄을 추가하려면 -t (합계) 옵션을 사용합니다.

 smem -k -t 

smem -t 옵션을 사용하여 출력에 합계 줄 추가

출력의 마지막 줄에는 각 열의 합계가 표시됩니다.

smem 출력 하단의 합계 라인

보고서 수정

사용자, 매핑(라이브러리) 또는 시스템 전체의 메모리 사용량을 보고하도록 smem 에 요청할 수 있습니다. 사용자별로 출력을 필터링하려면 -u (사용자) 옵션을 사용합니다. 자신의 사용량 이상을 보려면 sudo 와 함께 smem 을 실행해야 합니다.

 smem-u
 sudo smem -u 

sudo가 있거나 없는 smem -u 옵션 사용

보시다시피, 출력은 8자보다 긴 사용자 이름에 대해 모양이 구부러집니다.

사용 중인 라이브러리에 매핑된 사용량을 보려면 라이브러리를 사용 중인 프로세스나 해당 프로세스를 소유한 사용자에 관계없이 -m (매핑) 옵션을 사용합니다.

 smem -m -k -t 

smem -m 옵션을 사용하여 매퍼 보고서 가져오기

또한 사람이 읽을 수 있는 값과 합계도 요청했습니다.

라이브러리별 메모리 사용량을 보여주는 smem 매핑된 보고서

시스템 전체 메모리 사용량을 보려면 -w (시스템 전체) 옵션을 사용합니다.

 smem -w -k -t 

중소기업 시스템 전반에 걸친 보고서

단일 프로그램에 대한 보고

약간의 명령줄 마술을 사용하여 단일 프로그램과 모든 하위 프로세스에 대해 보고할 수 있습니다. smem 의 출력을 tail 로 파이프하고 tail 에 마지막 줄만 표시하도록 요청할 것입니다. 사람이 읽을 수 있는 값을 사용하고 합계를 제공하도록 smem 에 지시합니다. 합계가 마지막 줄이 될 것이고 그것이 우리를 위해 표시될 줄 tail 입니다.

광고

smem 과 함께 -c (열) 옵션을 사용하고 출력에 포함할 열을 알려줍니다. 이것을 Proportional Set Size 열로 제한하겠습니다. -P (프로세스 필터) 옵션을 사용하면 smem 에 검색 문자열을 제공할 수 있습니다. 일치하는 출력 라인만 포함됩니다.

 smem -c pss -P 파이어폭스 -k -t | 꼬리 -n 1 

smem을 사용하여 프로세스 및 해당 자식의 메모리 사용량 표시

그것은 프로그램과 그 자식 프로세스의 RAM 소비를 알아내는 빠르고 깔끔한 방법입니다.

그래프 생성

--pie 또는 --bar 옵션을 전달하여 smem 이 그래프를 생성하도록 할 수 있습니다. 범주가 너무 많으면 그래프를 빠르게 이해할 수 없게 되지만 빠른 시각적 개요에는 유용할 수 있습니다.

명령 형식은 다음과 같습니다.

 smem --파이 이름 -s uss 

smem에 파이 차트 생성 요청

원형 차트는 자체 뷰어 창에 나타납니다.

자체 뷰어 창의 smem 파이 차트

다른 플롯을 보려면 uss 대신 pss 또는 rss 를 사용하십시오. 막대 그래프를 보려면 --bar 대신 --pie 를 사용하십시오.

광고

이것이 작동하려면 matplotlib 라이브러리와 함께 Python이 설치되어 있어야 합니다. 이들은 우리가 테스트한 Ubuntu, Fedora 및 Manjaro 배포판에 이미 설치되어 있습니다.

좋은 것은 작은 패키지로 제공됩니다.

smem 유틸리티에는 몇 가지 트릭이 더 있으므로 man 페이지를 확인하는 것이 좋습니다. 주요 레퍼토리는 여기에서 설명하고 CLI 도구 상자에 포함할 수 있는 아주 작은 도구입니다.

관련: 알아야 할 37가지 중요한 Linux 명령