JLT*_*hiu 3 python asynchronous twisted
我正在使用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我查询失败或阻止我(api.abc.com)引起的,因为我的压力测试可能就像ddos到那个终点.在那种情况下,不应该像拒绝连接吗?我不知道为什么会有这个Too many open files错误.或者是由创建太多线程查询引起的?
"文件"包括网络套接字,它是基于Unix的系统上的一种文件.可以配置最大打开文件数ulimit -n
# Check current limit
$ ulimit -n
256
# Raise limit to 2048
$ ulimit -n 2048
Run Code Online (Sandbox Code Playgroud)
用完文件句柄并且必须提高限制并不奇怪.但是如果限制已经很高,则可能是文件句柄泄漏(没有足够快地关闭它们).在像Python这样的垃圾收集语言中,终结器并不总是足够快地关闭文件,这就是为什么在完成文件后应该小心使用with块或其他系统来关闭文件.
我想以@Dietrich Epp 的回答为基础。设置 ulimit -n 将仅更改该终端的当前限制。如果您想更改此限制以使其存在于所有终端会话中(例如在 EC2 上),您需要编辑:
vim /etc/security/limits.conf
并为每个用户的打开描述符数量添加软限制和硬限制。例如,您可以将此代码段粘贴到上面的文件中:
* hard nofile 500000
* soft nofile 500000
root hard nofile 500000
root soft nofile 500000
Run Code Online (Sandbox Code Playgroud)
这会将每个新终端会话的限制设置为 500000。编辑后,注销然后重新登录,(或者如果可以,最好重新启动)。之后,您可以运行ulimit -n以确认它已正确设置。
| 归档时间: |
|
| 查看次数: |
10236 次 |
| 最近记录: |