2012-11-30 57 views
2

我面臨的問題是在python腳本中出現異常OSError 24(「太多打開的文件」)在我的Mac OS X上引發。Python - OSError 24(太多打開的文件)和共享內存

我不知道是什麼原因導致了這個問題。 lsof的-p顯示40-50行,我的ulimit爲1200(我檢查使用

resource.getrlimit(resource.RLIMIT_NOFILE) 

),即返回元組(1200,1200)。所以我甚至沒有超過極限。

我的腳本產生了多個子進程並且還分配了共享內存段。分配共享內存段時發生異常。我用sysv_ipc module

此外,我I總共享內存段的允許數目是足夠大的(128段),並命令

ipcs -b -m 

給絕對數目較少(未更然後40個段)知道。

回答

1

問題出在共享內存系統設置(shared memory – wiki)。

參數kern.sysv.shmseg位於/etc/sysctl.conf文件中,該文件表示每個進程可以附加的共享內存段的最大數量。所以我的價值32對我的劇本來說還不夠。

要查看參數,使用方法:

sysctl -A | grep shm 

要更新參數,編輯文件:

sudo vim /etc/sysctl.conf 

我現在看起來這樣的:

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.htmlhttp://support.apple.com/kb/HT4022

相關問題