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

标签 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 个段)。

最佳答案

问题出在共享内存系统设置 ( 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.html , http://support.apple.com/kb/HT4022

关于Python - OSError 24(打开文件太多)和共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13641169/

相关文章:

python - 用于紧密 DB/GUI 耦合的 python Web 应用程序框架?

python - 想要用Python中的新字符覆盖文本文件中特定行上的特定字符

c - 为什么通过网络发送的数据会转换为网络字节序?

python - 返回 __get attr__ 的 Tkinter 错误

python - Opencv Videocapture 无法读取 https url 视频

mysql - 在 OS X 上设置 MySQL root 用户密码

macos - 如何从 Mac 中的 Redis 桌面管理器连接到 Docker 容器中的 Redis 服务器?

python - 多进程和错误进程已 fork ,您无法安全地使用此 CoreFoundation 功能

javascript - 如何将 ipcRenderer 从 Electron 添加到 Angular?预加载脚本中的附加变量未定义

c++ - 如何在特定时间段内使用 `accept()` 接受任意数量的连接?