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

2024-05-23 18:09:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我面对的问题是在我的macosx上用python脚本引发了异常oserror24(“打开的文件太多”)。在

我不知道是什么引起了这个问题。lsof-p显示了大约40-50条线,我的ulimit是1200条(我用

resource.getrlimit(resource.RLIMIT_NOFILE)

),返回元组(1200,1200)。所以我甚至并没有超过极限。在

我的脚本生成了大量的子进程并分配了共享内存段。分配共享内存段时发生异常。我用sysv_ipc module。在

我也知道我所允许的共享内存段总数足够大(128段),并且命令

^{pr2}$

给出的数字肯定更少(不超过40段)。在


Tags: 文件脚本进程resourcemacosx元组sysv共享内存
1条回答
网友
1楼 · 发布于 2024-05-23 18:09:43

问题出在共享内存系统设置(shared memory – wiki)中。在

/etc/sysctl.conf文件中有一个参数kern.sysv.shmseg,它表示每个进程可以附加的最大共享内存段数。所以我的值是32,这对我的脚本来说是不够的。在

要查看参数,请使用:

sysctl -A | grep shm

要更新该参数,请编辑文件:

^{pr2}$

我现在的样子是这样的:

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

相关问题 更多 >