[英]Neo4j connection error as more concurrent users connect
我運行的 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, **config)
File "/home/ubuntu/api/env/lib/python3.6/site-packages/neo4j/__init__.py", 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 工作中這樣做,但這似乎只是部分工作。
我根據這篇文章增加了頁面緩存和堆計算。
我將打開文件限制從默認的 1024 增加到 50000。
我將服務器規格翻了一番。
從結構上講,我在配置文件中創建了一個數據庫驅動程序實例:
配置文件:
db = None
def getDB():
global db
if not db:
db = GraphDatabase.driver("bolt://localhost:XXXXXX", auth=basic_auth(DATABASE_USERNAME, 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 分鍾運行一次,並且每次都讓驅動程序實例保持打開狀態。 小學生錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.