대규모 Linux 서버 환경을 관리하는 동안 때때로 컴퓨터가 IPC 한도, 특히 세마포어가 남은 것으로 보입니다.
Linux #ipcs -u | grep -B2 sema
------ Semaphore Status --------
used arrays = 1024
allocated semaphores = 3072
Linux #ipcs -l | grep -B2 sema
------ Semaphore Limits --------
max number of arrays = 1024
max semaphores per array = 250
max semaphores system wide = 256000
max ops per semop call = 32
semaphore max value = 32767
특정 세마포어를 보면 세마포어에 마지막으로 액세스 한 프로세스 만 볼 수 있습니다.
Linux #ipcs -s -i 63636429
Semaphore Array semid=63636429
uid=11488322 gid=12460 cuid=11488322 cgid=12460
mode=0666, access_perms=0666
nsems = 3
otime = Mon Jul 14 16:02:09 2014
ctime = Mon Jul 14 16:02:05 2014
semnum value ncount zcount pid
0 1 0 0 11551
1 0 0 0 11551
2 0 0 0 11551
더 이상 존재하는 프로세스가 없습니다.
문제를 해결하고 세마포어가 올바르게 삭제되지 않은 이유를 찾는 가장 효과적인 방법은 무엇입니까?
더 일반적인 또 다른 질문은 OS가 고아 프로세스와 유사한 방식으로 사용되지 않는 세마포어를 얻지 못하는 이유는 무엇입니까?
1
세마포어는 일반적으로 여러 프로세스에서 사용됩니다. 따라서 자동으로 제거되지 않습니다. 누군가가 심층 답변을 제공 할 것이라고 확신합니다.
—
Daniel B