본문 바로가기

Server/Linux

[Linux] 리눅스 공유 메모리(Shared Memory) 정리

반응형

리눅스 공유 메모리(Shared Memory) 정리

https://www.softprayog.in/programming/interprocess-communication-using-system-v-shared-memory-in-linux

공유 메모리란?

- 리눅스에서 공유 메모리는 프로세스간에 데이터를 공유하고자 할 때 사용하는 메모리로 커널에 의해서 관리된다.

 

공유 메모리 특징

 - 공유메모리는 최초로 공유 메모리를 만드는 프로세스에 의해서 만들어 집니다. 이렇게 만들어진 메모리는 커널이 관리해 줍니다.

 - 한번 만들어진 공유 메모리 공간은 직접 삭제를 하거나 리눅스 시스템이 재부팅을 하거나 해야지만 없어집니다. 모든 프로세스가 더 이상 공유 메모리를 사용하지 않는다고 자동 삭제되는 일은 결코 없습니다.

 

공유 메모리 관련 서버 명령어

 - ipcs : IPC를 위한 자원들의 리스트 출력

 - ipcrm : IPC 자원 삭제

 

1. ipcs

# limits 정보 출력
ipcs -l 
------ Messages Limits --------
max queues system wide = 32000
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 18014398509465599
max total shared memory (kbytes) = 18014398509481980
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 32000
max semaphores per array = 32000
max semaphores system wide = 1024000000
max ops per semop call = 500
semaphore max value = 32767

# 모든 ipc 자원 조회
ipcs -a

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status

------ Semaphore Arrays --------
key        semid      owner      perms      nsems

 

2.ipcrm

# id가 shmid를 가진 shared memory 자원 삭제
ipcrm -m shmid

# id가 msgid인 message queue 자원 삭제
ipcrm -q msgid 

# id가 semid인 semaphore 자원 삭제
ipcrm -s semid

 

Shared Memory 관련 에러

"cannot create locks cannot allocate shared memory for locks"

→ 프로세스 기동시 에러가 발생할 경우 ipcrm 명령어를 통해 shared memory 자원 삭제 or 서버 리부팅 작업 진행

 

 

[참고]

- https://www.itopening.com/4371/

- https://linux.systemv.pe.kr/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B3%B5%EC%9C%A0-%EB%A9%94%EB%AA%A8%EB%A6%AC/#i

- https://hbase.tistory.com/280

반응형