공유 메모리에 대한 몇 마디
공유 메모리를 사용하면 프로세스가 공유 메모리 세그먼트에 배치하여 공통 구조와 데이터에 액세스할 수 있습니다. 프로세스 간에 데이터를 전달할 때 커널 개입이 발생하지 않기 때문에 가장 빠른 형태의 프로세스 간 통신이 가능합니다. 실제로 프로세스 간에 데이터를 복사할 필요가 없습니다.
Red Hat 머신의 가치는 아래와 같이 엄청납니다.
cat /proc/sys/kernel/shmmax
17446744003692774391
sysctl -a | grep kernel.shmmax
kernel.shmmax = 17446744003692774391
기가비트로 계산하면 - 16248546544.17632
논리적인가요? , 우리 뭔가 놓쳤나요?
머신에는 hadoop 클러스터용 64G 및 16개의 CPU가 있습니다.
답변1
이것기본값그렇습니다shmmax
#define SHMMAX (ULONG_MAX - (1UL << 24))
이는 오버플로 위험을 제한하면서 가능한 한 크게 선택된 상한입니다.
SHMMNI, SHMMAX 및 SHMALL은 기본 상한값이며 sysctl을 통해 수정할 수 있습니다. SHMMAX 및 SHMALL 값은 "현재 제한 검색, X 추가, 제한 업데이트" 형식의 작업을 통해 제한을 조정할 때 사용자 공간 오버플로 상황을 촉진하지 않고 가능한 한 크게 선택되었습니다. 따라서 SHMMAX 및 SHMALL을 더 크게 설정하는 것은 권장되지 않습니다. 이러한 제한 사항은 32비트 및 64비트 시스템에 적용됩니다.
그 값은 있는 그대로 양호하며 오류가 없습니다.