2012-11-30 5 views
2

문제가 발생하여 Python 스크립트에서 내 Mac OS X에서 발생하는 OSError 24 ("너무 많은 파일 열기") 예외가 발생했습니다.Python - OSError 24 (열려있는 파일이 너무 많음) 및 공유 메모리

나는 그 문제를 일으키는 원인이 될지 전혀 몰랐습니다. -p 약 40 ~ 50 선을 보였고, 내 ulimit를 1200했다 lsof를, 즉 튜플 (1200, 1200) 반환 (나는

resource.getrlimit(resource.RLIMIT_NOFILE) 

사용하여 확인). 그래서 저는 한계를 훨씬 넘지 않았습니다.

내 스크립트에서 하위 프로세스 수를 생성하고 공유 메모리 세그먼트도 할당했습니다. 공유 메모리 세그먼트를 할당하는 중 예외가 발생했습니다. 나는 sysv_ipc module을 사용합니다.

또한 내가 공유 메모리 세그먼트의 허용 된 수만큼 큰 (128 개 세그먼트)는 총, 그리고
ipcs -b -m 

확실히 적은 수의 (안보다 40 다음 세그먼트) 준 명령을 알고 있었다.

답변

1

공유 메모리 시스템 설정 (shared memory – wiki)에서 문제가 발생했습니다.

각 프로세스가 첨부 할 수있는 공유 메모리 세그먼트의 최대 수를 나타내는 /etc/sysctl.conf 파일에 kern.sysv.shmseg 매개 변수가 있습니다. 그래서 필자의 스크립트에는 충분치 못한 32라는 가치가있었습니다. 매개 변수를 보려면

는 사용 : 그런 지금

sudo vim /etc/sysctl.conf 

내 외모 :

sysctl -A | grep shm 

그 매개 변수 편집 파일을 업데이트하려면

kern.sysv.shmmax=564777216 
kern.sysv.shmmin=1 
kern.sysv.shmmni=700 
kern.sysv.shmseg=128 
kern.sysv.shmall=131072 

공지 사항, 당신은 다시 시작해야합니다 시스템을 사용하여 설정을 적용합니다.

는 현재 할당 된 공유 메모리 세그먼트 보려면 다음을 입력합니다

ipcs -m -b 

것은 제거하려면 모든 공유 메모리 세그먼트 :

for n in `ipcs -b -m | egrep ^m | awk '{ print $2; }'`; do ipcrm -m $n; done 

공지 사항을, 어떤 프로세스에 연결하지 않는 경우에만 세그먼트 정말 삭제됩니다 . 공유 메모리 설정에

더 : http://techjournal.318.com/general-technology/shared-memory-settings-explain/, http://www.spy-hill.com/help/apple/SharedMemory.html, http://support.apple.com/kb/HT4022

관련 문제