【发布时间】:2019-05-12 12:52:22
【问题描述】:
所以...谁喜欢侦探工作,倾注于日志记录???这是我们中间的侦探!
我们的一位用户表示,他们在我们的网站上进行测验时遇到了错误页面。下面我附上我们服务器日志中与他们报告的时刻相关的一些文本。
我认为第三列(8 或 9)是指服务器上的线程。因此,在 07:36:31,用户正在通过一系列函数调用为他们准备 HTML 响应,以响应用户的 POST(回答之前的测验问题)。
但由于某种原因,在用户于 07:36:44 进行第二次 POST 后,服务器似乎生成了两个并行运行的线程,以响应我认为的单个 POST 请求。
您可以在最后看到错误及其原因。对于第一个线程 (8),一个条目被保存到数据库中。当第二个线程在几毫秒后到达该点时,我们会收到完整性错误,因为具有该键的记录已经存在(感谢线程 8)。
我以前从未遇到过这个问题。关于为什么突然我们的服务器决定突然产生两个线程导致意外的竞争条件的任何想法??
我的技术栈: * Heroku 服务器 * Django python web 框架
07:36:31 : 95.XX.67.113 https:POST status:200 "/en/main/"
..<snip>..
07:36:31 : wrappers 9 INFO : User Aysegul: starting main.views.quiz_class.ask_quiz_question
07:36:31 : wrappers 9 INFO : User Aysegul: starting grammar.views.assess.run_quiz
07:36:31 : wrappers 9 INFO : User Aysegul: starting main.views.quiz_class.get_next_scheduled_q
07:36:31 : wrappers 9 INFO : User Aysegul: starting main.views.quiz_class.ask_quiz_question
07:36:44 : 95.XX.67.113 https:POST status:200 "/en/main/"
07:36:44 : wrappers 8 INFO : User Aysegul: starting main.views.main.switchboard
07:36:44 : wrappers 9 INFO : User Aysegul: starting main.views.main.switchboard
07:36:44 : wrappers 8 INFO : User Aysegul: starting main.views.main.load_session_data
07:36:44 : wrappers 9 INFO : User Aysegul: starting main.views.main.load_session_data
07:36:44 : user_profile 8 DEBUG : Model UserProfile Instance saved:[<User: Aysegul>]
07:36:44 : main 8 DEBUG : Aysegul switchboard - returning control back to run_quiz
07:36:44 : wrappers 8 INFO : User Aysegul: starting grammar.views.assess.run_quiz
07:36:44 : user_profile 9 DEBUG : Model UserProfile Instance saved:[<User: Aysegul>]
07:36:44 : main 9 DEBUG : Aysegul switchboard - returning control back to run_quiz
07:36:44 : wrappers 9 INFO : User Aysegul: starting grammar.views.assess.run_quiz
07:36:44 : wrappers 8 INFO : User Aysegul: starting main.views.quiz_class.record_answer
07:36:44 : wrappers 9 INFO : User Aysegul: starting main.views.quiz_class.record_answer
07:36:44 : wrappers 8 INFO : User Aysegul: starting main.views.quiz_class.question_feedback
07:36:44 : log 9 ERROR : Internal Server Error: /en/main/
07:36:44 : Traceback (most recent call last):
07:36:44 : File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
07:36:44 : return self.cursor.execute(sql, params)
07:36:44 : psycopg2.IntegrityError: duplicate key value violates unique constraint "grammar_entry_question_id_text_d90c1
7cd_uniq"
07:36:44 : DETAIL: Key (question_id, text)=(1385, Üç günden beri hasta oluyor) already exists.
附:有趣的是,这个问题也发生在 heroku/django 组合中...... Heroku one request spawns two responses that crashes my app
【问题讨论】:
标签: django multithreading heroku django-views