![평신도의 용어로 shmages는 무엇입니까?](https://linux55.com/image/605/%ED%8F%89%EC%8B%A0%EB%8F%84%EC%9D%98%20%EC%9A%A9%EC%96%B4%EB%A1%9C%20shmages%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
shmpages
커널 및 메모리 용어의 전반적인 체계는 정확히 무엇입니까? shmpages
한도에 도달하면 무엇을 의미하나요?
이것이 Linux가 아닌 다른 곳에서도 작동하는지 궁금합니다.
답변1
사용자 모드 프로세스는 IPC(프로세스 간 통신)를 사용하여 서로 통신할 수 있으며 이를 수행하는 가장 빠른 방법은 공유 메모리 페이지( shmpages
)를 사용하는 것입니다. 예 를 들어 음악을 재생하고 비디오를 재생하는
경우 두 프로세스 모두 일부 사운드를 출력할 수 있는 권한이 있어야 합니다. banshee
vlc
pulseaudio
공유 메모리 구성 및 사용에 대해 자세히 알아보려면 다음 명령 중 일부를 시도해 보십시오.
공유 메모리 구성 표시:
sysctl kernel.shm{max,all,mni}
기본적으로(Linux 2.6) 다음과 같이 출력되어야 합니다.
kernel.shmmax = 33554432
kernel.shmall = 2097152
kernel.shmmni = 4096
shmmni
허용되는 공유 메모리 세그먼트의 최대 수, shmmax
공유 메모리 세그먼트에 허용되는 크기(32MB), shmall
모든 세그먼트의 최대 총 크기(페이지로 표시, 8GB로 변환)
현재 사용 중인 공유 메모리:
grep Shmem /proc/meminfo
배포판에서 활성화된 경우:
ls -l /dev/shm
ipcs
IPC 사용에 대해 자세히 알아볼 수 있는 훌륭한 도구:
ipcs -m
공유 메모리의 사용량이 출력되며, 해당 크기에 할당된 세그먼트를 확인할 수 있습니다.
ipcs -m -i <shmid>
세그먼트를 생성한 프로세스의 PID(cpid)와 세그먼트를 사용한 마지막 프로세스(lpid)를 포함하여 지정된 세그먼트에 대한 추가 정보를 표시합니다.
ipcrm
공유 메모리 세그먼트는 삭제할 수 있습니다(그러나 이러한 세그먼트는 다른 프로세스가 연결되지 않은 경우에만 삭제됩니다. nattach 열 참조 ipcs -m
).
ipcrm -m <shmid>
공유 메모리를 소진시키는 것은 많은 양의 공유 메모리를 과도하게 사용하는 프로그램, 할당된 세그먼트를 제대로 분리하지 않는 프로그램, sysctl
값 수정 등일 수 있습니다.
이는 Linux에만 국한된 것이 아니며 (대부분의) UNIX 시스템에도 적용됩니다(공유 메모리는씨부닉스).