我在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)
关于如何解决这个问题的任何想法都将非常感谢!
答案 0 :(得分:0)
我也遇到过这个问题,在Ubuntu上至少普通用户的开放文件限制默认为4096.所以,如果你要同时拥有超过4000个连接,你需要加强它。
解决方案: 提高打开的文件描述符限制
以下是如何在ubuntu上执行此操作
在 /etc/security/limits.conf 的末尾添加一行
* soft nofile 16384
* hard nofile 16384
第一栏描述了世界卫生组织的限制申请。 *是通配符,表示所有用户。要提高root的限制,您必须明确输入&root;&#39; root而不是&#39; *&#39;。
您还需要修改 /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
这里有一篇关于使用eventlet的警告的好文章 https://code.mixpanel.com/2010/10/29/gevent-the-good-the-bad-the-ugly/