你好,希望這不會太微不足道。「隨機」SocketError /連接拒絕py2neo查詢的錯誤
我堆棧的相關部分是Gunicorn/Celery,neomodel(0.3.6)和py2neo(1.5)。 Neo4j版本是1.9.4,綁定在0.0.0.0:7474(所有這些都在linux上,Ubuntu 13.04我認爲)
所以我的gunicorn /芹菜服務器在大多數情況下都很好,除了偶爾,我得到以下錯誤:
ConnectionRefusedError(111, 'Connection refused')
Stacktrace (most recent call last):
File "flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "flask/_compat.py", line 33, in reraise
raise value
File "flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "Noomsa/web/core/util.py", line 156, in inner
user = UserMixin().get_logged_in()
File "Noomsa/web/core/util.py", line 117, in get_logged_in
user = models.User.index.get(username=flask.session["user"])
File "neomodel/index.py", line 50, in get
nodes = self.search(query=query, **kwargs)
File "neomodel/index.py", line 41, in search
return [self.node_class.inflate(n) for n in self._execute(str(query))]
File "neomodel/index.py", line 28, in _execute
return self.__index__.query(query)
File "py2neo/neo4j.py", line 2044, in query
self.__uri__, quote(query, "")
File "py2neo/rest.py", line 430, in _send
raise SocketError(err)
所以,你可以看到,我做User.index.get
呼叫(在請求響應的第一次調用),並得到一個套接字錯誤。有時。大多數時候,它連接好。這個錯誤發生在所有使用neo4j連接的Flask視圖/ Celery任務中(而不僅僅是做User.index.get
;))。
到目前爲止,我採取的步驟涉及moneky修補neomodel連接函數,以檢查每個線程創建了GraphDatabaseService
對象,並且每隔30秒左右自動重新連接(並驗證)到neo4j服務器。這可能會減少錯誤的頻率,但它們仍然會發生。
在網上尋找錯誤,似乎大多數人試圖連接到錯誤的接口/ IP /端口。但是,鑑於我的大部分請求都經過了,我不認爲這是這種情況。
任何想法?我不認爲它是相關的,但我的數據庫似乎有38k孤兒節點;這本身可能值得另一個問題。
編輯︰我應該補充說,這似乎消失時運行gunicorn /芹菜workers=1
,而不是workers=$CPU_N
。不明白爲什麼它應該很重要,因爲顯然neo4j默認設置爲處理$N_CPU*10
連接。
是的,正如我懷疑的那樣,固定它(或者至少暫時)。另外,該死的你更改Node.id到Node._id;) – BluePeppers
這是因爲節點ID通常不應該直接使用:-P –