【发布时间】:2017-12-29 08:07:14
【问题描述】:
我们正在开发一个需要访问数据库的网站。访问这样的页面可以正常工作;连续访问多个也很好。但是,如果您等待很长时间(15 分钟似乎就足够了),访问另一个页面将挂起很长时间(已观察到 10-20 分钟)。之后,this error 将打印出来。
以下是相关代码:
if __name__ == "__main__":
conf = load_conf(sys.argv[1])
engine = create_engine('postgresql://%s:%s@%s:%s/%s' %
(conf['db']['user'], conf['db']['pw'], conf['db']['address'],
conf['db']['port'], conf['db']['database']), echo=False)
Session = sessionmaker(bind=engine)
session = Session()
app = make_app(session, conf)
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
数据库位于不同的服务器上。我的个人机器在荷兰,而数据库在德国的服务器中。我伙伴的个人机器在意大利。
最值得注意的是,这个问题只出现在我运行 Arch Linux 的机器上。我们已经在另外两台机器上进行了测试,运行 Windows 和其他一些 Linux(我假设是 Ubuntu,如果需要可以检查)。此时,我们不知道如何继续调试。
当然,我会应要求提供任何额外需要的信息。
【问题讨论】:
-
连接超时。捕获异常并创建一个新会话,然后重试。
-
我们可以这样做,但是正如我所说,甚至需要 10-20 分钟才能引发异常,所以它不会解决问题。
-
一段时间后您的连接似乎中断了。检查防火墙!
-
我的个人机器上没有使用任何防火墙
-
经典原因是 NAT。它不必在你的机器上——它可以在你和服务器之间的任何地方。 VPN、网关或其他隧道技术通常使用 NAT。近年来,由于 IPv4 IP 耗尽,ISP 开始使用运营商级 NAT。检查您的互联网连接——如果您没有与服务器的直接第 2 层路由连接,则 NAT 可能有问题。
标签: python postgresql ssl sqlalchemy tornado