Red Hat Linux가 시스템에서 실제 사용 가능한 메모리보다 적은 메모리를보고하는 이유는 무엇입니까?

비교적 작은 가정용 Red Hat Linux 서버 (약 8GB RAM)가 있습니다. 나는 다양한 것들을 추적하기 위해 집에서 자란 앱을 실행하는 것 외에는 많이 사용하지 않습니다. 박스에서 실행되는 유일한 실제 것은 데이터베이스와 웹 서버입니다.

NMON 및 TOP과 같은 도구를 사용하여 시스템 카운터를 검사 할 때 총 시스템 여유 메모리는 상대적으로 적고 (수백 MB 정도) 데이터베이스 및 웹 서버의 활성 메모리는 여전히 낮습니다 (단지 결합 된 3GB 소비). 다른 모든 실행중인 프로세스를 포함하더라도 총 소비 메모리는 4GB 미만입니다.

Red Hat Linux가 총 메모리에서 실행중인 프로세스에 사용 된 총 메모리를 뺀 것보다 적은 메모리를보고하는 이유는 무엇입니까?



답변

사용 가능한 메모리와 사용되지 않은 메모리를 혼동하지 마십시오. 유닉스 세계에서 사용 가능한 메모리는 논리적 데이터가 매핑되지 않은 물리적 메모리 페이지입니다. 사용하지 않는 메모리가 매핑 일부 데이터를 가지고 않지만, 현재없는 활성 실행중인 프로세스에 의해 사용.

% free -m
             total       used       free     shared    buffers     cached
Mem:           997        942         55          0         71        366
-/+ buffers/cache:        504        492
Swap:         2015        618       1397

리눅스 (그리고 모든 유닉스 OS)는 가능한 한 적은 메모리를 확보하려고합니다. 대신, 다양한 IO 전송 작업을위한 파일 캐시 및 버퍼 등을 위해 실행중인 OS의 프로세스에 능동적으로 매핑되지 않은 메모리를 사용합니다.

혼란 스러울 수있는 다른 것은 실행중인 모든 프로세스에서 사용중인 메모리를 추가하여 총 사용중인 메모리를 얻을 수 없다는 것입니다. 이 작업을 시도하면 응용 프로그램이 실제로 컴퓨터에있는 것보다 더 많은 메모리를 사용하고있는 것으로 나타납니다. 이것은 두 가지 이유 때문입니다

  1. Copy-On-Write 메모리 할당, 메모리 매핑 IO공유 동적 라이브러리를 통해 다양한 프로세스간에 메모리를 공유 할 수 있습니다 .
  2. 운영 체제는 실제로 제공된 것보다 더 많은 메모리를 응용 프로그램에 약속 할 자유가 있습니다. 대부분의 응용 프로그램 작성자는 오버 헤드를 피하기 위해 한 번에 많은 양의 메모리를 요구하는 것을 선호하며 실제로 모든 메모리를 사용하지 않을 수도 있습니다.

lwn.net에 최근이 기사에 관한 기사가 있습니다 .


답변

Linux는 파일 시스템 액세스를 메모리에 능동적으로 캐시하여 디스크 액세스 시간을 단축합니다. 걱정할 것이 없습니다.

상자에서 free -m을 실행하면 메모리 사용 위치를 더 잘 알 수 있습니다.

아래는 내 상자 중 하나에서 가져온 출력입니다. 여유 메모리는 147Meg이며 파일 시스템 액세스 요청을 위해 거의 4G가 캐시됩니다.

free -m
             total       used       free     shared    buffers     cached
Mem:          6035       5888        147          0         77       4116
-/+ buffers/cache:       1693       4341
Swap:         4722          0       4722


답변

“buffered”및 “cached”필드도 포함하고 있습니까?


답변

리눅스에서, / proc / meminfo의 Committed_AS를 살펴보면, 커널이 실제로 프로세스 실행을 약속 한 메모리 양 (실제 + 스왑)입니다.

리눅스는 메모리를 매우 효율적으로 사용하며, 일부 프로세스에 약속 되지 않은 블록 은 최근에 자주 액세스되는 파일을 캐시하는 데 사용됩니다. 따라서 리눅스는 부팅 후 얼마 지나지 않아 사용 가능한 모든 물리적 메모리의 90 %를 사용하는 것이 일반적입니다.

커널이 .. 및 더티 (스왑) 사용법을 제공하기 위해 커밋 한 내용을 살펴보면 전체적으로 더 나은 그림을 볼 수 있습니다.

이 동작을 조정해야하는 경우 질문을 업데이트하십시오. 🙂

이것은 Linux 용 표준 MO입니다. 일부 배포판은 sysctl을 통해 메모리 관리를 조정하여 요구 사항을 충족시킵니다. 그러나 당신이보고하는 것은 무엇보다도 전형적인 것입니다.


답변

시스템에서 어떤 종류의 커널을 실행하고 있습니까? 32 비트 커널은 PAE가 활성화 된 상태로 컴파일되지 않는 한 약 3.6GB의 메모리 만보고합니다.

이 버전이 최신 버전의 Redhat Enterprise Linux (또는 CentOS)-v3 이상이면 기본 32 비트 커널에서이 기능을 사용할 수 있습니다.

위에서 설명한 ‘무료’명령의 출력을 게시 할 수 있으면 이것이 문제인지 여부를 확인할 수 있습니다.


답변