Linux 게스트를 사용하여 ESXi에 대량의 메모리를 할당할 때 Null 포인터 역참조가 충돌함

Linux 게스트를 사용하여 ESXi에 대량의 메모리를 할당할 때 Null 포인터 역참조가 충돌함

내 생각에는 어떤 종류의 메모리 손상이 있어야 합니다. 문제는 주로 많은 양의 메모리를 할당하는 프로세스(특히 브라우저 및 cc1plus)에서 발생합니다. 메모리 사용량이 많은 JVM은 시작 시 거의 사망했고 Eclipse는 첫 번째 창도 만들 수 없었습니다. 문제는 거의 항상 널 포인터 역참조로 인해 발생하는 세그폴트입니다.

내 경험:

  • Windows와 OSX는 ESXi에서 동일한 프로세스를 실행하며 이러한 현상은 발생하지 않습니다.
  • 그러나 다른 커널(3.6과 4.1 사이)을 사용하는 Linux가 표시됩니다. 다양한 Linux 배포판(저는 debian, ubuntu 및 opensuse를 사용해 보았습니다)도 표시됩니다.
  • Linux에서도 32비트 클라이언트에는 문제가 없습니다.
  • PCI 패스스루가 활성화되어 있어도 문제가 발생합니다(BIOS에서 IOMMU가 꺼진 경우에도 마찬가지).
  • esxi 5.5를 6으로 업그레이드해도 도움이 되지 않습니다.

기타 정보:

  • 밤새 호스트 컴퓨터에서 memtest를 실행했는데 아무런 문제도 발견되지 않았습니다.
  • 호스트에 64비트 운영 체제가 있으면(즉, 가상화가 없음) 문제가 발생하지 않습니다.
  • 충돌은 주로 프로세스가 많은 양의 메모리를 할당한 후에 발생합니다.
  • 문제는 거의 항상 사용자 공간에서 발생합니다(그러나 그 이유는 커널 공간이 많은 양의 메모리를 거의 할당하지 않기 때문일 수 있음).
  • 가속을 끄거나 게스트 OS를 "기타 Linux" 또는 "기타 64비트 OS"로 전환해도 도움이 되지 않습니다.
  • 게스트 머신에서 SMP를 끄는 것(즉, 하나의 CPU 코어만 제공하는 것)은 도움이 되지 않습니다. 다른 CPU 설정(다양한 멀티 소켓/멀티 코어 설정, 게스트를 다양한 CPU 코어로 제한)을 사용해도 효과가 없습니다.
  • 게스트 OS 메모리를 제한하는 것도 도움이 되지 않습니다. 하지만 게스트는 원활하게 작동하고 메모리 소모가 적은 몇 가지 프로세스만 실행합니다.
  • 이 문제는 전원을 켜자마자 발생하지 않습니다. 이는 대규모 메모리 할당 없음 주기가 발생한 후에만 나타납니다(예: Firefox에서 클릭한 지 몇 분 후).
  • 가상 SCSI 컨트롤러 유형을 LSI에서 vmware 반가상화로 변경하거나 스와핑을 꺼도 도움이 되지 않았습니다.

내 생각에는 뭔가가 많은 호출로 인해 게스트 OS 메모리를 손상(0으로 설정)하는 것 같습니다 brk().

이 문제가 발생한 사람이 있습니까? 사냥 효율성을 높이기 위해 취할 수 있는 다른 조치는 무엇입니까?

답변1

문제가 해결되었습니다.

이것은 memtest가 감지할 수 없는 손상된 메모리 모듈입니다. :-)

이 문제는 Windows 및 OSX에서도 발생하지만 이후 버전에서는 발생합니다.

절대 잊지 마세요: memtest를 찾을 수 없습니다언제나모든 램에는 문제가 있습니다! 그 이유는 memtest가 메모리를 반복하여 복잡한 작업을 수행하기 때문입니다. 하지만 오랫동안 사용되지 않은 메모리 영역을 남겨둘 수는 없습니다.

DIMM 메모리는 본질적으로 대규모 커패시터 배열입니다. 이 커패시터는 천천히 전하를 잃습니다. 따라서 DIMM은 주기적으로 메모리를 새로 고쳐야 합니다. 즉, 메모리 내용을 주기적으로 읽고 다시 써야 합니다.

그렇지 않으면 기억의 내용이 손실됩니다. 이 메모리 새로 고침은 하드웨어, 주로 마더보드/CPU의 메모리 컨트롤러에서 발생합니다.

또한 메모리 내용을 읽는 또 다른 기능도 있습니다.분명한커패시터(메모리 칩에 가능한 한 많은 커패시터를 통합하는 유일한 방법이기 때문에 매우 작습니다). 따라서 메모리를 읽을 때마다 해당 내용을 다시 써야 합니다.

memtest는 이 새로 고침 메커니즘과 관련된 문제를 감지할 수 없습니다.

메모리 테스트가 특정 방법에 적합한지 감지하는 것이 가능하지만 메모리의 절반을 검사하고 나머지 절반은 조용하게 두고 오랜 지연 후에만 전환합니다. 하지만 지금까지 memtest에서는 구현되지 않았습니다.

관련 정보