我的dyno即将达到其RAM的极限,我不知道为什么。
我目前正在使用侦察器来跟踪内存并查找缺陷,但是只有1个函数会导致膨胀,并且响应时间很高,我也不知道为什么。响应时间约为5000毫秒,每请求5M分配,并且是74-77M内存膨胀的多次。
@app.route('/api/analytics_permission', methods=['POST'])
def analytics_permission():
data_received = json.loads(request.data)
project_id = data_received['project_id']
project = Project.query.filter(Project.id == project_id).first()
if project:
permission_state_string = json.dumps(data_received['permission'])
user_agent = data_received['user_agent']
hostname = data_received['hostname']
category = data_received['category']
permission_state = PermissionState.default
if permission_state_string == '"granted"':
permission_state = PermissionState.granted
elif permission_state_string == '"denied"':
permission_state = PermissionState.denied
permission = Permission(state=permission_state,
user_agent=user_agent,
hostname=hostname,
category=category)
project.all_permissions.append(permission)
db_session.add(project)
db_session.add(permission)
db_session.commit()
return respond("Updated permission count", 200)
return respond("analytics_permission: No project", 400)
def respond(message, code):
""" Returns an API response """
return make_response(json.dumps({'message': message}), code)
我已经联系了heroku支持部门,他们只建议我使用更多插件来跟踪使用情况。 无论流量的模式如何,我的应用程序一直在大约512MB RAM的情况下运行。
编辑:
我们使用了Hobby Basic tier postgreSQL数据库,它具有0 RAM。我们试图将数据库更新到具有4GB RAM的下一层,但是问题没有消失。
我们还尝试将测功机从业余爱好升级到标准1X或标准2X。 Standart 2X具有1GB RAM,但由于某些原因,直到我们收到R14 - Memory quota exceeded
为止,即使是如此数量的RAM也能被完全使用。
使用2 x Standart 1X测功机也没有效果。
侦察兵告诉我们CPU使用率也很高,达到95%〜。
以下是heroku的指标:
根据侦察上面的功能(analytics_permission()
)会导致问题。
我们的理论:
受analytics_permission()
影响的表很大,它已经有10万行,并且analytics_permission()
创建了新行,但是数据库应该处理此行,还是我错了?