我正在使用treq (https://github.com/twisted/treq)从我的web服务中查询一些其他的api。今天,当我对自己的服务进行压力测试时,它显示了一个错误
twisted.internet.error.DNSLookupError: DNS lookup failed: address 'api.abc.com' not found: [Errno 24] Too many open files.
但问题是,我的整个代码我没有打开任何文件。我怀疑这可能是由于我查询的应用程序接口关闭或阻塞了我( api.abc.com)造成的,因为我的压力测试可能就像到那个端点的ddos。不过,在这种情况下,这不应该是类似于拒绝连接的东西吗?我不知道为什么它会有那个Too many open files错误。或者这是因为创建了太多的线程查询?
发布于 2016-09-17 02:27:23
“文件”包括网络套接字,这是基于Unix的系统上的一种文件类型。可使用ulimit -n配置打开文件的最大数量
# Check current limit
$ ulimit -n
256
# Raise limit to 2048
$ ulimit -n 2048文件句柄用完并必须提高限制,这并不奇怪。但是,如果限制已经很高,您可能会泄漏文件句柄(没有足够快地关闭它们)。在像Python这样的垃圾收集语言中,终结器并不总是足够快地关闭文件,这就是为什么您应该小心地使用with块或其他系统在完成文件后立即关闭文件。
发布于 2018-12-07 08:45:56
我想以@Dietrich Epp的回答为基础。设置ulimit -n将仅更改该终端的电流限制。如果您想要更改此限制,使其存在于所有终端会话中(如在EC2上),则需要编辑:
vim /etc/security/limits.conf
并添加对每个用户的开放描述符的数量的软和硬限制。例如,您可以将此代码片段粘贴到上面的文件中:
* hard nofile 500000
* soft nofile 500000
root hard nofile 500000
root soft nofile 500000这会将每个新终端会话的限制设置为500000。编辑完成后,注销,然后重新登录(如果可以,也可以重新启动,这是更好的做法)。然后,您可以运行ulimit -n来确认是否正确设置了它。
https://stackoverflow.com/questions/39537731
复制相似问题