Python - OSError 24(打开的文件太多)和共享内存

时间:2012-11-30 08:02:49

标签: python macos ipc shared-memory ulimit

我遇到了问题,在我的mac os x python脚本中出现异常OSError 24(“太多打开的文件”)。

我不知道是什么原因导致了这个问题。 lsof -p显示大约40-50行,我的ulimit是1200(我检查使用

resource.getrlimit(resource.RLIMIT_NOFILE)

),返回元组(1200,1200)。所以我甚至没有超出限制。

我的脚本产生了多个子进程并且还分配了共享内存段。分配共享内存段时发生异常。我使用sysv_ipc module

此外,我知道我允许的共享内存段总数足够大(128段)和命令

ipcs -b -m

绝对减少了数量(不超过40个细分)。

1 个答案:

答案 0 :(得分: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