가상 메모리 사용 이해> Linux에서 스왑 + 물리적


9

6GB의 상주 메모리와 70GB의 가상 메모리가 할당되었음을 '최상위'로보 고하는 프로세스가 있습니다. 이상한 점은이 특정 서버에는 8GB의 물리적 공간과 35GB의 스왑 공간 만 사용할 수 있다는 것입니다.

'맨 위'설명서에서 :

   o: VIRT  --  Virtual Image (kb)
      The total amount of virtual memory used by the  task.   It  includes
      all  code,  data  and  shared  libraries  plus  pages that have been
      swapped out. (Note: you can define the STATSIZE=1 environment  vari-
      able  and  the VIRT will be calculated from the /proc/#/state VmSize
      field.)

      VIRT = SWAP + RES.

이 설명을 감안할 때 프로세스의 가상 메모리 할당은 사용 가능한 스왑 + 실제 메모리로 제한됩니다.

'pmap'에 따르면이 프로세스의 코드, 공유 라이브러리 및 공유 메모리 섹션은 모두 최소 300M 정도입니다.

분명히, 기계와 프로세스는 여전히 정확하게 작동하지만 (느리기는하지만) 여기서 무엇을 놓치고 있습니까?

답변:


9

실제 램 또는 페이지 파일에없는 0 메모리가 필요할 수 있습니다.

보고 싶을만한 자료들 :

응용 프로그램이 많은 빈 메모리 페이지를 작성합니까? 그렇다면 응용 프로그램이 다음과 같은 이점을 얻을 수 있습니다.

실시간 메모리 페이지에서 압축 및 압축 해제 할 수 있습니다. 결과적으로 디스크로 스왑하지 않고 RAM에 모든 것을 유지할 수 있습니다 ( 매우 느림 ).


예, 응용 프로그램이 IPV4 공간에서 많은 상관 관계를 수행하므로 트래픽 분포에 따라 빈 페이지가 많이있을 수 있습니다. 우리는 그것을 조심해야 할 것입니다. 감사!
Belly

기꺼이 다른 사용자가 나를 표시 할 수 있기를 바랍니다. 나는 킬러 답변을 내놓았지만 나는 1,266의 등급을 가지고있다 :-(. 나 같은 서버 결함 사용자는 생각하지 않는다-Hahhah
The Unix Janitor

1
사람들이 귀하에게 투표하지 않는 이유는 다음과 같습니다. 1. 답변-사용 마크 업 형식. 2. 사용자 이름이 일반적인 것 같습니다. 3. 가장 중요하게 : 당신이 그것에 대해 언급하기에 충분히 중요하다는 사실. 사람들의 입에 신맛을 남깁니다.
벨민 페르난데스

@ user37899 공감대는 3 가지 범주로 분류되는 경향이 있습니다. 정답은 정보의 형식, 형식 및 읽기 쉬운 질문, 인기있는 질문입니다. 나는 당신의 서식에 대해 작업 할 것이지만, 당신은 또한 선을 가지고 몇 가지 환상적인 답변이 단지 하나의 공감대와 함께 사이트 주위에 앉아 있음을 알아야합니다. 질문의 인기는 가장 큰 영향을 미치는 요소입니다.
Jeff Ferland

1
서식을 지정했습니다. 잘하면 그것은 도움이됩니다.
Belmin Fernandez

2

다음은 virt vs. 상주 메모리에 대한 설명입니다.

/programming/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used

토론은 Java 프로세스에 관한 것이지만 Linux에서 실행되는 모든 것에 적용 가능합니다. 미덕과 관련한 주요 요점은 전체에는 결코 사용되지 않을 수있는 모든 것들이 포함된다는 것입니다. Virt는 프로세스가 주소 지정 가능한 공간을 제한하기 때문에 32 비트 OS를 살펴볼 것이지만 그렇지 않으면 크게 유용하지 않습니다. 언급 한 바와 같이, 상주 메모리는 사용 가능한 실제 RAM 및 스왑으로 제한되는 상주 메모리입니다.


할당 된 가상 메모리는 자신의 실제 메모리 + 스왑 공간보다 더 큰 이유를 그는 실제로 물었다 ..
유닉스 관리인에게

예, 그리고 Stackoverflow에서 논의가 가능한 방법에 대해 이야기합니다.
cjc

1

프로세스의 주소 공간이 지정한 크기이기 때문에 OS에 의해 실제로 할당되지 않기 때문일 수 있습니다.

보낸 사람 : http://lwn.net/Articles/428100/

Go 개발자는 "충분한 오버 헤드가 적고 대기 시간이 짧다"라는 목표를 달성하려는 과정에서 단순화 된 가정을했는데, 그 중 하나는 실행중인 애플리케이션에 대해 관리되는 메모리가 거의 연속적인 단일 시스템에서 나온다는 것입니다. 주소 범위. 이러한 가정은 편집기가 vi로 겪은 것과 같은 문제에 부딪 칠 수 있습니다. 다른 코드는 범위의 중간에 조각을 할당 할 수 있습니다 .Go Go 개발자는 동일한 솔루션을 채택했습니다. 그들은 필요한 것으로 생각되는 모든 메모리를 단순히 할당합니다. 16GB는 시작시 64 비트 시스템에서 충분할 것입니다.

따라서 때때로 메모리 관리가 불필요하게 수행됩니다. 지속적인 주소 공간을 가지면 사용되지 않은 메모리 해제가 간단 해집니다.


0

대답은 MMAP 일 것입니다. 데이터는 디스크에 있지만 스왑 외부에 있으며 "free"또는 "top"명령으로 볼 수 없습니다.

Java 프로세스가 너무 복잡하지 않은 경우 "lsof"로 재생하여 MMAP 파일이있는 위치를 찾을 수 있습니다. 그러나이 Java 프로세스가 복잡하면보기가 어렵습니다.


-1

또한 Linux를 사용하면 실제 메모리 + 스왑 공간보다 많은 가상 메모리를 할당 할 수 있다는 사실에 놀랐지 만 분명히 일반적인 상황에서 성능을 향상시키는 데 도움이됩니다.

다행히 메모리 계정 모드를 전환하는 데 사용할 수있는 커널 조정 매개 변수가 있습니다. 이 매개 변수는 vm.overcommit_memory이며 사용 가능한 메모리를 추적하는 데 사용되는 알고리즘을 나타냅니다. 기본값 (0)은 휴리스틱 방법을 사용하고 가상 메모리 시스템을 오버 커밋합니다. 프로세스가 무작위로 강제 종료되는 대신 할당시 메모리 부족 오류가 발생하도록하려면이 매개 변수를 2로 설정해야합니다.

http://www.linuxjournal.com/article/10678


이것은 완전히 혼란 스럽다. 오버 커밋은 실제 메모리와 스왑 공간보다 더 많은 가상 메모리를 할당 할 수있는 것이 아닙니다. 초과 커밋하지 않고도 그렇게 할 수 있습니다. (예를 들어, 2GB의 RAM, 아니 스왑없이 오버 커밋을 가진 시스템에서, 당신은 여전히 메모리는 4GB의 파일을 가상 메모리 4GB의를 사용하여 읽기 전용 매핑 할 수 있습니다.)
데이비드 슈워츠
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.