我正在使用 treq ( https://github.com/twisted/treq ) 从我的网络服务中查询其他一些 api。今天在给自己的服务做压力测试的时候,报错
twisted.internet.error.DNSLookupError:DNS 查找失败:找不到地址“api.abc.com”:[Errno 24] 打开的文件太多。
但问题是,我的整个代码我没有打开任何文件。我怀疑这可能是由于我查询的 api 出现故障或阻止了我(api.abc.com)造成的,因为我的压力测试可能就像一个 ddos 到那个终点。不过,在那种情况下,那不应该是拒绝连接吗?我不知道为什么会出现 Too many open files
错误。还是创建过多线程查询造成的?
"file"包括网络套接字,它是基于 Unix 的系统上的一种文件。可使用 ulimit -n
配置打开文件的最大数量
# Check current limit
$ ulimit -n
256
# Raise limit to 2048
$ ulimit -n 2048
用完文件句柄并不得不提高限制并不奇怪。但如果限制已经很高,您可能会泄漏文件句柄(关闭它们的速度不够快)。在像 Python 这样的垃圾收集语言中,终结器并不总是足够快地关闭文件,这就是为什么你应该小心使用 with
block 或其他系统在你完成后立即关闭文件他们。
我是一名优秀的程序员,十分优秀!