0

こんにちは、これが些細なことに終わらないことを願っています。

私のスタックの関連部分は、Gunicorn/Celery、neomodel (0.3.6)、および py2neo (1.5) です。Neo4j のバージョンは 1.9.4 で、0.0.0.0:7474 にバインドされています (これはすべて Linux にあり、Ubuntu 13.04 だと思います)

そのため、私の gunicorn/celery サーバーはほとんどの場合問題ありませんが、たまに次のエラーが発生します。

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;))。

GraphDatabaseServiceこれまでのところ、私が取った手順には、オブジェクトがスレッドごとに作成されていることを確認し、約 30 秒ごとに neo4j サーバーに自動的に再接続 (および認証) するように、neomodel 接続関数にモンキー パッチを適用することが含まれていました。これにより、エラーの頻度が減った可能性がありますが、それでも発生します。

オンラインでエラーを探していると、ほとんどの人が間違ったインターフェイス/IP/ポートに接続しようとしているようです。しかし、私の要求の大部分が通過することを考えると、ここではそうではないように感じます.

何か案は?関連しているとは思いませんが、私のデータベースには 38k の孤立したノードがあるようです。それはおそらく、それ自体で別の質問に値するでしょう。

workers=1編集:追加する必要があります。これは、の代わりに , を使用して gunicorn/celery を実行すると消えるようですworkers=$CPU_N$N_CPU*10どうやらneo4jはデフォルトで接続を処理するように設定されているため、なぜそれが重要なのかわかりません。

4

1 に答える 1