
Linux 메모리 사용량은 해석하기 어렵고 이해하기 어려울 수 있습니다. 와 함께 smem 프로세스가 어떤 메모리를 사용하고 있고 어떤 프로세스가 가장 많이 사용하고 있는지 쉽게 알 수 있습니다.
메모리 사용량
Linux는 컴퓨터의 RAM에 무슨 일이 일어나고 있는지 확인할 수 있는 여러 가지 방법을 제공합니다. 문제는 메모리 관리가 운영 체제의 복잡한 문제라는 것입니다. 물리적 RAM, 스왑 공간 형태의 가상 RAM, 그리고 한 번에 실행되는 다양한 유형의 프로세스 요구 사항을 저글링해야 합니다.
프로세스는 자신을 메모리에 로드할 때 RAM을 사용합니다. 그런 다음 그들은 수행하도록 설계된 작업을 수행할 공간을 확보하기 위해 더 많은 RAM을 요청합니다. 일부 프로세스는 RAM에 거의 영향을 미치지 않고 다른 프로세스는 메모리를 매우 많이 사용합니다.
커널과 나머지 운영 체제, 데스크탑 환경, 실행하는 모든 응용 프로그램 또는 명령줄 세션은 모두 컴퓨터에 설치된 제한된 RAM 양의 일부를 요구하고 있습니다. 일부 프로세스는 다른 프로세스를 생성합니다. 일부 프로세스는 다른 프로세스와 RAM을 공유합니다.
이 모든 것을 해독하고 “이 프로그램이나 프로세스가 사용하는 RAM은 얼마입니까?”라는 질문에 대한 간단한 답을 찾으려고 합니다. 놀라운 도전이 될 수 있습니다. 세분성은 훌륭하고 그 자리가 있지만 마찬가지로 과도한 정보가 장애가 될 수 있습니다.
예를 들어, cat /proc/meminfo 의사 파일 시스템을 엿보기 위해 이 기사를 연구하는 데 사용된 시스템에서 50줄의 출력을 반환했습니다. 어디서 시작합니까?
cat /proc/meminfo
그리고 일부 Linux 유틸리티는 다른 답변을 제공합니다. 테스트 머신에는 다음과 같은 인스턴스가 있었습니다. less 프로세스 ID가 2183인 실행 중입니다.
우리는 사용할 수 있습니다 pmap 유틸리티 -x (extended) 옵션은 프로세스의 메모리 사용량에 대한 전체 그림을 가져옵니다. 인스턴스의 프로세스 ID와 함께 사용합니다. less:
pmap -x 2183

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

우리는 그 다음 사용했다 ps 유틸리티 -o (출력) 옵션, RSS 열을 만들고 동일한 인스턴스의 프로세스 ID를 전달했습니다. less:
ps -o rss 2183

우리는 다른 결과를 얻습니다. 이는 설계사 측에서 결정한 사항입니다. ps 작가. 이것은에서 ps man 페이지:
다른 유틸리티의 작성자는 RAM 사용량을 측정하는 방법에 대한 자신의 견해를 가지고 있습니다.
RSS, USS 및 PSS
RSS(Resident Set Size)는 스왑 공간을 제외하고 프로세스가 사용하는 공유 라이브러리에 필요한 RAM을 포함하여 프로세스에 할당된 RAM의 양입니다.
RSS는 거의 항상 RAM 사용량을 초과 보고합니다. 둘 이상의 프로세스가 하나 이상의 공유 라이브러리를 사용하는 경우 RSS는 각 라이브러리의 RAM 사용량을 해당 프로세스 각각의 RAM 사용량에 추가합니다. 여기에는 부정확성과 함께 어떤 아이러니가 있습니다. 공유 라이브러리는 각 프로세스가 라이브러리의 자체 개인 인스턴스를 로드할 필요가 없음을 의미합니다. 라이브러리가 이미 메모리에 있는 경우 해당 라이브러리를 공유하고 RAM 오버헤드를 줄입니다.
비례 설정 크기는 공유 메모리를 공유하는 프로세스 간에 공유 메모리의 양을 나누어 이 문제를 해결하려고 합니다. 일부 메모리를 공유하는 4개의 프로세스가 있는 경우 PSS는 공유 RAM의 25%가 각 프로세스에서 사용된다고 보고합니다. 이것은 근사치이지만 RSS가 그리는 그림보다 진행 상황과 더 유사합니다.
Unique Set Size는 프로세스에서 직접 사용하거나 프로세스에서 단독으로 사용하는 라이브러리에서 사용하는 RAM의 양입니다. 다시 말하지만 스왑 공간을 무시합니다. 실제 물리적 RAM에만 관심이 있습니다.
USS와 PSS는 의 저자 Matt Mackall이 제안한 용어 및 개념입니다. smem.
smem 유틸리티
그만큼 smem 유틸리티는 프로세스, 사용자, 매핑 또는 시스템 전체에서 사용하는 메모리에 대해 보고합니다. 테스트한 모든 배포판에서 설치가 필요했습니다. Ubuntu에 설치하려면 다음 명령을 사용하십시오.
sudo apt install smem

설치하기 위해서 smem Fedora에서는 다음을 입력해야 합니다.
sudo dnf install smem

설치하기 위해서 smem Manjaro 사용:
sudo pacman -Sy smem

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

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

열은 다음과 같습니다.
- PID: 메모리를 사용하는 프로세스의 프로세스 ID입니다.
- 사용자: 프로세스를 소유한 사용자의 사용자 이름입니다.
- 명령: 프로세스를 시작한 명령줄입니다.
- 교환: 프로세스가 사용 중인 스왑 공간의 양.
- USS: 고유한 세트 크기.
- PSS: 비례 설정 크기입니다.
- RSS: 레지던트 세트 크기.
백분율로 표시된 크기를 보려면 다음을 사용하십시오. -p (백분율) 옵션.
smem -p

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

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

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

합계 라인을 추가하려면 다음을 사용하십시오. -t (합계) 옵션.
smem -k -t

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

보고서 수정
당신은 물어볼 수 있습니다 smem 사용자, 매핑(라이브러리) 또는 시스템 전체의 메모리 사용량을 보고합니다. 사용자별로 출력을 필터링하려면 다음을 사용하십시오. -u (사용자) 옵션. 자신의 사용량 이상을 보려면 다음을 실행해야 합니다. smem ~와 함께 sudo .
smem -u
sudo smem -u

보시다시피, 출력은 8자보다 긴 사용자 이름에 대해 모양이 구부러집니다.
사용 중인 라이브러리에 매핑된 사용량을 보려면 라이브러리를 사용 중인 프로세스나 해당 프로세스를 소유한 사용자에 관계없이 다음을 사용하십시오. -m (매핑) 옵션.
smem -m -k -t

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

시스템 전체 메모리 사용량을 보려면 다음을 사용하십시오. -w (시스템 전체) 옵션.
smem -w -k -t

단일 프로그램에 대한 보고
약간의 명령줄 마술을 사용하여 단일 프로그램과 모든 하위 프로세스에 대해 보고할 수 있습니다. 우리는 출력을 파이프 할 것입니다 smem ~ 안으로 tail 그리고 물어봐 tail 마지막 줄만 표시합니다. 우리는 말할 것이다 smem 사람이 읽을 수 있는 값을 사용하고 합계를 제공합니다. 총계가 마지막 줄이 될 것이고 그것이 바로 그 줄입니다. tail 우리를 위해 표시됩니다.
우리는 사용할 것입니다 -c (열) 옵션 smem 출력에 포함할 열을 알려주세요. 이것을 Proportional Set Size 열로 제한하겠습니다. 그만큼 -P (프로세스 필터) 옵션을 사용하면 검색 문자열을 smem . 일치하는 출력 라인만 포함됩니다.
smem -c pss -P firefox -k -t | tail -n 1

그것은 프로그램과 그 자식 프로세스의 RAM 소비를 알아내는 빠르고 깔끔한 방법입니다.
그래프 생성
합격할 수 있습니다 --pie 또는 --bar 가질 수 있는 옵션 smem 그래프를 생성합니다. 범주가 너무 많으면 그래프를 빠르게 이해할 수 없게 되지만 빠른 시각적 개요에는 유용할 수 있습니다.
명령 형식은 다음과 같습니다.
smem --pie name -s uss

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

다른 플롯을 보려면 다음을 사용하십시오. pss 또는 rss 대신에 uss. 막대 그래프를 보려면 다음을 사용하십시오. --bar 대신에 --pie.
이 작업을 수행하려면 Python과 함께 설치해야 합니다. matplotlib 도서관. 이들은 우리가 테스트한 Ubuntu, Fedora 및 Manjaro 배포판에 이미 설치되어 있습니다.
좋은 것은 작은 패키지로 제공됩니다.
그만큼 smem 유틸리티에는 몇 가지 트릭이 더 있으며 다음을 확인하는 것이 좋습니다. man 페이지. 주요 레퍼토리는 여기에서 설명하고 CLI 도구 상자에 포함할 수 있는 아주 작은 도구입니다.
관련된: 알아야 할 37가지 중요한 Linux 명령








