![SHMMAX + 실수로 올바르게 설정되지 않은 커널 매개변수가 어떤 영향을 받았나요?](https://rvso.com/image/154472/SHMMAX%20%2B%20%EC%8B%A4%EC%88%98%EB%A1%9C%20%EC%98%AC%EB%B0%94%EB%A5%B4%EA%B2%8C%20%EC%84%A4%EC%A0%95%EB%90%98%EC%A7%80%20%EC%95%8A%EC%9D%80%20%EC%BB%A4%EB%84%90%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EA%B0%80%20%EC%96%B4%EB%96%A4%20%EC%98%81%ED%96%A5%EC%9D%84%20%EB%B0%9B%EC%95%98%EB%82%98%EC%9A%94%3F.png)
공유 메모리에 대한 몇 마디
공유 메모리를 사용하면 프로세스가 공유 메모리 세그먼트에 배치하여 공통 구조와 데이터에 액세스할 수 있습니다. 프로세스 간에 데이터가 전달될 때 커널 개입이 발생하지 않으므로 사용 가능한 가장 빠른 형태의 프로세스 간 통신입니다. 실제로 프로세스 간에 데이터를 복사할 필요가 없습니다.
우리는 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비트 시스템 모두에 적합합니다.
그 가치는 있는 그대로 괜찮습니다. 올바르게 설정되었으므로 실수가 없습니다.