python——ubuntu下[Error 24: too many open files]的解决方法
2017-08-03 15:28
417 查看
在上一篇博客中我提到,我在使用多线程+协程爬虫抓取数据的时候,当我的协程数×线程数非常大的时候,会提示[Error 24: too many open files]和其他一系列错误。这篇博客就是专门针对这个问题的解决方案,亲测可行。
为什么会报这个错误呢?明明只打开了几个文件啊?
这应该是绝大多数人的第一反应。我当时遇到这个错误的时候也很懵,后来想了想,应该是我每一个协程都获取了访问这个文件的句柄,所以尽管你只把爬取的数据保存到一个文件中,但是程序运行时,可能有很多线程或进程都拥有这个文件的句柄,在程序看来就像打开了很多个文件。
因此针对这种情况唯一的方法就是更改系统默认的最大文件数量。
ubuntu下,可以在终端输入
有两种修改此默认值的方法。两种方法分别在不同的机器上成功过,第一种简单,但不保证能够成功,如果第一种失败的话,尝试第二种,基本上能够解决问题。
第一种方法:
直接在终端输入:
我在我自己的电脑上试了这种都没有成功,只在服务器上成功过。
第二种方法:
在终端输入
将上面两行写入完毕后,按Esc键,退出编辑模式,然后同时按shift和;键,输入
windows下还没有试过,最近很少登windows了,windows不知道会不会有这样的问题,如果遇到了的话,原理应该是一样的,按照这个思路去找答案应该就可以解决。
以上。欢迎交流。
为什么会报这个错误呢?明明只打开了几个文件啊?
这应该是绝大多数人的第一反应。我当时遇到这个错误的时候也很懵,后来想了想,应该是我每一个协程都获取了访问这个文件的句柄,所以尽管你只把爬取的数据保存到一个文件中,但是程序运行时,可能有很多线程或进程都拥有这个文件的句柄,在程序看来就像打开了很多个文件。
因此针对这种情况唯一的方法就是更改系统默认的最大文件数量。
ubuntu下,可以在终端输入
ulimit -n来查看当前系统默认的最大文件数量,一般默认为1024.显然,这个值对于爬虫来说比较小了。
有两种修改此默认值的方法。两种方法分别在不同的机器上成功过,第一种简单,但不保证能够成功,如果第一种失败的话,尝试第二种,基本上能够解决问题。
第一种方法:
直接在终端输入:
ulimit -n 10000
我在我自己的电脑上试了这种都没有成功,只在服务器上成功过。
第二种方法:
在终端输入
sudo vim /etc/security/limits.conf打开文件后,到文件末尾,敲击键盘i开始插入内容:
* soft nofile 10000 * hard nofile 10000
将上面两行写入完毕后,按Esc键,退出编辑模式,然后同时按shift和;键,输入
wq!保存文件并退出。然后注销重新登陆。此时在在终端输入
ulimit -n得到的结果就是刚刚设置的值了。这个值其实可以设的再大一点,目前我只设置到了20000.
windows下还没有试过,最近很少登windows了,windows不知道会不会有这样的问题,如果遇到了的话,原理应该是一样的,按照这个思路去找答案应该就可以解决。
以上。欢迎交流。
相关文章推荐
- java.lang.OutOfMemoryError : unable to create new native Thread 与 Too many open files 解决方法
- [转]socket: Too many open files (24) 的解决方法
- nginx:accept() failed (24: Too many open files)解决方法
- 在执行ab压力测试时出现socket: Too many open files (24)的解决方法
- Python错误提示:[Errno 24] Too many open files的分析与解决
- java.net.SocketException: Too many open files解决方法
- InnoDB: Error number 24 means 'Too many open files'.
- linux 打开文件数 too many open files 解决方法
- 转:JAVA.NET.SOCKETEXCEPTION: TOO MANY OPEN FILES解决方法
- 运维实战案例之“Too many open files”错误与解决方法
- 解决openwrt报“Too many open files”错误的方法
- 运维实战案例之“Too many open files”错误与解决方法
- 在Linux中打开了太多文件(Too many open files)的解决方法
- java.net.SocketException: Too many open files解决方法查看javaIO数量
- java.net.SocketException: Too many open files解决方法
- linux 打开文件数 too many open files 解决方法
- 转:java.net.SocketException: Too many open files解决方法
- 在Linux中打开了太多文件(Too many open files)的解决方法
- UBUNTU 下 APACHE2 Too many open files: Error retrieving pid file /var/run/apache2.pid
- JBoss下"Too many open files"的解决方法