#ubuntu #neo4j
#ubuntu #neo4j
Вопрос:
- Сообщество Neo4j 3.5.12
- Python 3.6.9
- neo4j-драйвер == 1.7.6
- neobolt == 1.7.17
- Ubuntu Server 18.04
- Flask 1.1.2
На веб-сервере, который я запускаю, внезапно произошло увеличение трафика на 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()
Кто-нибудь знает, что является причиной этого или как это исправить, пожалуйста? Спасибо!
Ответ №1:
Оказывается, у меня было задание cron, которое выполнялось каждые 10 минут и каждый раз оставляло экземпляр драйвера открытым. Ошибка школьника.