如何解决随着更多并发用户连接,Neo4j连接错误
- Neo4j 3.5.12社区
- Python 3.6.9
- neo4j-driver == 1.7.6
- neobolt == 1.7.17
- Ubuntu Server 18.04
- 烧瓶1.1.2
我运行的Web服务器的流量突然增加了2000%。在此增加之前,一切工作正常。但是,现在在交通繁忙几个小时后(不确定多长时间,但要在5个小时之内),我看到了以下错误,此后又不断失败。好像没有关闭连接之类的东西。
db = GraphDatabase.driver("bolt://localhost:MYPORTNO",auth=basic_auth(DATABASE_USERNAME,DATABASE_PASSWORD,encrypted=False)
File "/home/ubuntu/api/env/lib/python3.6/site-packages/neo4j/__init__.py",line 120,in driver
return Driver(uri,**config)
File "/home/ubuntu/api/env/lib/python3.6/site-packages/neo4j/__init__.py",line 161,in __new__
return subclass(uri,line 235,in __new__
pool.release(pool.acquire())
File "/home/ubuntu/api/env/lib/python3.6/site-packages/neobolt/direct.py",line 715,in acquire
return self.acquire_direct(self.address)
File "/home/ubuntu/api/env/lib/python3.6/site-packages/neobolt/direct.py",line 608,in acquire_direct
connection = self.connector(address,error_handler=self.connection_error_handler)
File "/home/ubuntu/api/env/lib/python3.6/site-packages/neo4j/__init__.py",line 232,in connector
return connect(address,**dict(config,**kwargs))
File "/home/ubuntu/api/env/lib/python3.6/site-packages/neobolt/direct.py",line 972,in connect
raise last_error
File "/home/ubuntu/api/env/lib/python3.6/site-packages/neobolt/direct.py",line 962,in connect
s = _connect(resolved_address,**config)
File "/home/ubuntu/api/env/lib/python3.6/site-packages/neobolt/direct.py",line 843,in _connect
raise ServiceUnavailable("Failed to establish connection to {!r} (reason {})".format(resolved_address,error))
neobolt.exceptions.ServiceUnavailable: Failed to establish connection to ('127.0.0.1',MYPORTNO) (reason [Errno 111] Connection refused)
如果我重新启动apache,它又可以工作了,所以目前作为创可贴,我每隔几个小时就做一次cron作业,但这似乎只能起到部分作用。
我根据this article增加了页面缓存和堆计算。
我将服务器规格提高了一倍。
配置文件:
db = None
def getDB():
global db
if not db:
db = GraphDatabase.driver("bolt://localhost:XXXXXX",DATABASE_PASSWORD),encrypted=False)
return db
然后,我可以在模块文件中进行查询,如下所示。我相信以下语法可正确管理由于with
语句而被打开和关闭的连接,因此不应保留打开的连接:
模块文件:
db = config.getDB()
with db.session() as s:
with s.begin_transaction() as tx:
tx.run("the cypher",{the params})
尽管我不确定它们是否直接相关,但我还在日志中看到以下错误。
ValueError: filedescriptor out of range in select()
请问有人知道是什么原因或如何解决?谢谢!
解决方法
事实证明,我有一个cron作业,该作业每10分钟运行一次,并且每次都使驱动程序实例保持打开状态。小学生错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。