项目使用 tornado + sqlalchemy+docker 部署在 5 台主机上运行,使用 swarmkit 进行集群管理,但是现在出现了一个问题:在查询数据库的时候偶尔会卡死(一天好几次),然后程序无法运行了,但是不会抛出任何错误。
后来尝试放弃 docker,直接在虚拟机中运行 poetgres 已经跑了半个月了还没有出现错误,后来我们猜测会不会是 项目使用 tornado + sqlalchemy+docker 部署在 5 台主机上运行,使用 swarmkit 进行集群管理,但是现在出现了一个问题:在查询数据库的时候偶尔会卡死(一天好几次),然后程序无法运行了,但是不会抛出任何错误。
try:
logging.info('get department ' + _department_uuid)
department = DepartmentNode.get_department_by_uuid(_department_uuid, self.session)
if department:
self.response["app_name"] = department.name
logging.info('end debug get department')
except Exception as e:
logging.error('error get department ' + _department_uuid + ' ' + e.message)
这是会出现问题的一段代码,当执行到查 department 的时候程序就卡住了,没有异常抛出,没有错误日志,数据库也没有任何日志。
@classmethod
def get_department_by_uuid(cls, uuid, session):
try:
department = session.query(DepartmentNode).filter(
and_(DepartmentNode.deleted_at == None,
DepartmentNode.uuid == uuid)
).one()
except MultipleResultsFound, e:
return None
except NoResultFound, e:
return None
except Exception, e:
return None
else:
return department
后来尝试放弃 docker,直接在虚拟机中运行 poetgres 使用 ip 连接已经跑了半个月了还没出过问题,后来我们猜测会不会是 swarmkit 的 DNS 解析问题,然后我就做了个实验,在 swarm 注册 3 个数据库,分别使用服务名,网络别名和 host 模式插入数据,跑了一天了,插入了 300 万条数据还没有出现问题。。。有没有大佬遇到过类似的问题?