SHMMAX + 실수로 올바르게 설정되지 않은 커널 매개변수가 어떤 영향을 받았나요?

SHMMAX + 실수로 올바르게 설정되지 않은 커널 매개변수가 어떤 영향을 받았나요?

공유 메모리에 대한 몇 마디

공유 메모리를 사용하면 프로세스가 공유 메모리 세그먼트에 배치하여 공통 구조와 데이터에 액세스할 수 있습니다. 프로세스 간에 데이터가 전달될 때 커널 개입이 발생하지 않으므로 사용 가능한 가장 빠른 형태의 프로세스 간 통신입니다. 실제로 프로세스 간에 데이터를 복사할 필요가 없습니다.

우리는 Redhat 머신의 가치가 다음과 같이 엄청나다는 것을 알았습니다.

 cat /proc/sys/kernel/shmmax
 17446744003692774391

 sysctl -a | grep kernel.shmmax
 kernel.shmmax = 17446744003692774391

내가 Giga로 계산했을 때 - 16248546544.17632

논리적인가요? , 여기서 뭔가 놓치고 있는 게 있나요?

머신은 64G 및 16 CPU를 사용하며 hadoop 클러스터에서 사용됩니다.

답변1

그만큼기본값왜냐하면shmmax

#define SHMMAX (ULONG_MAX - (1UL << 24))

이는 오버플로 위험을 제한하면서 가능한 한 크게 선택된 상한입니다.

SHMMNI, SHMMAX 및 SHMALL은 sysctl로 수정할 수 있는 기본 상한값입니다. SHMMAX 및 SHMALL 값은 "현재 제한 검색, X 추가, 제한 업데이트" 형식의 작업을 통해 제한을 조정할 때 사용자 공간에서 오버플로가 발생하는 시나리오를 용이하게 하지 않고 가능한 한 크게 선택되었습니다. 따라서 SHMMAX 및 SHMALL을 더 크게 만드는 것은 권장되지 않습니다. 이러한 제한은 32비트 시스템과 64비트 시스템 모두에 적합합니다.

그 가치는 있는 그대로 괜찮습니다. 올바르게 설정되었으므로 실수가 없습니다.

관련 정보