거대한 데이터 세트에서 작동하는 프로그램을 작성했습니다. 내 CPU와 OS (우분투)는 모두 64 비트이고 4GB의 RAM을 가지고 있습니다. "top"(% Mem 필드)을 사용하여 프로세스의 메모리 사용량이 약 87 %, 즉 3.4GB 이상으로 증가한 것을 확인했습니다.프로세스가 4GB에서 죽는 이유는 무엇입니까?
그런 다음 "uname -m"을 사용하여 프로세스가 액세스 할 수있는 메모리 양을 "무제한"으로 확인했습니다.
OS와 CPU가 모두 64 비트이고 스왑 파티션이 있기 때문에 운영 체제는 가상 메모리 즉 [> 스왑 공간에서 3.4GB + yGB]를 사용해야하며 필요한 경우에만 더 많은 기억, 그것은 죽었 음에 틀림 없다.
그래서, 다음 한 QUES :
- 얼마나 많은 물리적 메모리 할 수있는 이론적으로 64 비트 M/C에 프로세스에 액세스 할 수 있습니다. 내 대답은 2^48 바이트입니다.
- 실제 메모리가 2^48 바이트 미만인 경우 OS가 가상 메모리를 사용해야하며 맞습니까?
- OS가 SWAP 공간을 사용 했어야하는 이유는 OS가 SWAP 공간을 사용해야했기 때문입니다. 우리 프로그램을 코딩하기 위해 특정 시스템 호출을 사용해야한다고 생각하지 않습니다.
좋습니다.
2^48 바이트가 전체 주소 공간입니다. 프로세스는이 모든 것을 사용할 수 없습니다. 커널 주소 공간도 이에 맞아야합니다. OOM 살인자에 의해 살해 됐나요? – fge
앱이 64 비트로 컴파일 되었습니까? 64 비트 시스템의 32 비트 앱은 여전히 4GB 메모리 제한을받습니다. –
또한 어떻게 할당합니까? mmap, malloc, shm, 다른, 모두? – fge