我们正在使用django-eventstream
向客户发送事件。您可以认为我们的工作流就像用例一样,但是非常简单。在我们遇到'too many open files
'错误(Redhat 7.4
)之前,事情一直在完美地运行。我们使用“ lsof
”跟踪了哪些进程正在打开文件,发现python正在拍摄多个线程来加载所需的库(主要是.so文件)。我们使用gunicorn
作为我们的服务器,其中产生了uvicorn
个工作程序。试图回退到“ runserver
”,但面临同样的问题。
在尝试“ time
”和“ chat
”示例时,我们看到了相同的行为。在页面的每次刷新(同一台机器,相同的浏览器,相同的选项卡)上,都会产生一个新线程,并且“ lsof
”在页面的每次刷新中列出大约2k个文件。
我们尝试在其他两个具有相同操作系统的不同计算机上重新创建相同的问题。看到了相同的行为,期望在一台机器上。这是一台笔记本电脑,内存为4GB
,其余为服务器,内存为256GB
。有趣的是,一切在笔记本电脑上都可以正常工作,但在服务器上却不能。也许是由于资源相对稀疏,操作系统正在关闭笔记本电脑中的文件,而不是服务器中的文件,这会导致“ too many open files
”错误?
任何想法如何解决此问题? 干杯!
答案 0 :(得分:0)
继续进行线程假设,尝试通过设置Why is the order of types in Python 2 fixed, and an unorderable TypeError in Python 3?来限制线程数。现在限制了线程数,因此也限制了文件数。我不知道如果用户> ASGI_THREADS将尝试连接到服务器,将会发生什么。我想现在我需要阅读有关负载平衡的内容。