4

我有一个在 Linux 上运行的 Python 2.7 脚本,它与IOError: [Errno 24] Too many open files. 当我运行lsof -p <script_pid>以查看脚本打开了哪些文件时,我看到越来越多的anon_inode文件。

eventlet此脚本首先使用并发从 S3 下载文件。multiprocessing.dummy然后它使用多线程处理下载的文件。我已经单独运行了多线程代码,发现当我为 eventlet 包含以下猴子补丁时,它只会泄漏文件描述符:

patcher.monkey_patch(thread=False)

任何关于我如何解决这个问题的想法都将不胜感激!

4

1 回答 1

1

我也遇到了这个问题,在 Ubuntu 上,至少普通用户的打开文件限制默认为 4096。所以,如果你要同时连接超过 4000 个,你需要增加这个。

解决方案提高打开文件描述符限制

这是在 ubuntu 上的操作方法

在/etc/security/limits.conf的末尾添加一行,例如

* soft nofile 16384    
* hard nofile 16384

第一列描述了要申请的限制是谁。* 是通配符,表示所有用户。要提高 root 的限制,您必须明确输入“root”而不是“*”。

您还需要编辑/etc/pam.d/common-session*并将以下行添加到末尾:

session required pam_limits.so

注销然后重新登录,然后才能使用新的最大限制,测试

ulimit -n

https://askubuntu.com/questions/162229/how-do-i-increase-the-open-files-limit-for-a-non-root-user

这里还有一篇关于使用 eventlets 的注意事项的好文章 https://code.mixpanel.com/2010/10/29/gevent-the-good-the-bad-the-ugly/

于 2015-05-01T14:24:54.467 回答