gpt4 book ai didi

Python tornado OS 错误 24 打开的文件太多

转载 作者:太空宇宙 更新时间:2023-11-03 14:05:04 24 4
gpt4 key购买 nike

我正在使用用 Python 3.5 编码的 websocket 服务器。这是提供我的网站实时信息所必需的。

我使用的“服务器”库称为 tornado (版本 4.3)处理 websocket 连接和 http 请求。为了向后兼容(如果浏览器尚不支持 websocket),我使用 python 库 sockjs-tornado (版本 1.0.3)还为 websocket 连接添加了一些额外的功能。

此连接使用 wss://协议(protocol),因此它被加密并为套接字连接加载证书。问题是当服务器运行了一段时间后我收到了一个错误。

ERROR:tornado.application:Exception in callback (<socket.socket fd=18, family=AddressFamily.AF_INET, type=2049, proto=6, laddr=('***', 8443)>, <function wrap.<locals>.null_wrapper at 0x6fbeea4769d8>)
Traceback (most recent call last):
File "/home/website/python/tornado/ioloop.py", line 883, in start
handler_func(fd_obj, events)
File "/home/website/python/tornado/stack_context.py", line 275, in null_wrapper
return fn(*args, **kwargs)
File "/home/website/python/tornado/netutil.py", line 274, in accept_handler
callback(connection, address)
File "/home/website/python/tornado/tcpserver.py", line 239, in _handle_connection
do_handshake_on_connect=False)
File "/home/website/python/tornado/netutil.py", line 510, in ssl_wrap_socket
context = ssl_options_to_context(ssl_options)
File "/home/website/python/tornado/netutil.py", line 487, in ssl_options_to_context
context.load_cert_chain(ssl_options['certfile'], ssl_options.get('keyfile', None))
OSError: [Errno 24] Too many open files

我已经增加了 linux 服务器上打开文件的限制,但是如果 python 脚本在 24 小时后没有重新启动,那么如果连接了大约 300 个客户端,这些错误就会弹出。如果我在这段时间内重新启动脚本,一切都会再次正常工作,即使在每个人都重新连接之后也是如此。

我真的不知道该怎么做,因为 Tornado 似乎没有正确关闭证书文件并在每个新连接上重新加载它们。

最佳答案

tornado 可能不是泄漏文件句柄的情况;只是 Tornado 会在一段时间后达到极限,因为它会定期打开文件。

获取相关进程的 PID 并查看 /proc/[PID]/fd。它将列出当前打开的所有文件句柄。如果您的代码由于某种原因使文件保持打开状态,它们会堆积在那里。

关于Python tornado OS 错误 24 打开的文件太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43642970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com