Python freeBSD中的龙卷风连接未关闭
我有一个tornado web服务器,类似于:Python freeBSD中的龙卷风连接未关闭,python,freebsd,tornado,connection,Python,Freebsd,Tornado,Connection,我有一个tornado web服务器,类似于: app = tornado.web.Application(handlersList,log_function=printIt) app.listen(port) serverInstance = tornado.ioloop.IOLoop.instance() serverInstance.start() 处理程序由tornado.web.RequestHandler生成。 当我在freeBSD上运行服务器时,有时页面/资源需要很长时间才能
app = tornado.web.Application(handlersList,log_function=printIt)
app.listen(port)
serverInstance = tornado.ioloop.IOLoop.instance()
serverInstance.start()
处理程序由tornado.web.RequestHandler
生成。
当我在freeBSD上运行服务器时,有时页面/资源需要很长时间才能加载,
尝试调试时,我发现在等待页面加载时,Tornado还没有创建请求对象,并且查看netstat结果,我看到很多与状态已建立的连接
所以我的想法是,有太多未关闭的连接,操作系统拒绝来自同一会话的新连接
会是这样吗
我没有在get、post函数中执行任何操作,在编写之后,是否应该在返回之前关闭/关闭连接
编辑1:获取/发布是同步的(无@异步)
编辑2:通过强制no\u keep\u alive
class BasicFeedHandler(tornado.web.RequestHandler):
def finish(self, chunk=None):
self.request.connection.no_keep_alive = True
tornado.web.RequestHandler.finish(self, chunk)
我不确定keep_alive连接是否应该在客户端关闭连接后保持打开状态这么长时间,不管这种解决方法如何工作。我通过查看
HTTPConnection.\u finish\u request
,找到了如何在没有保持活动状态时执行此操作
这一行self.stream.read\u直到(b(“\r\n\r\n”),self.\u header\u callback)
运行。
在此上下文中\r\n\r\n是什么?请尝试以下操作:
class Application(tornado.web.Application):
def __init__(self):
...
http_server = tornado.httpserver.HTTPServer(Application(),no_keep_alive=True)
http_server.listen(port)
tornado.ioloop.IOLoop.instance().start()
如果您有疑问,请尝试调用
self.finish
。处理程序的get/set方法是否声明为异步的?这似乎是一个已知的问题,邮件列表中有许多关于Tornado泄漏文件描述符的投诉。