Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我如何调查这些神秘的Django坠机事件?_Mysql_Django_Apache_Profiling - Fatal编程技术网

Mysql 我如何调查这些神秘的Django坠机事件?

Mysql 我如何调查这些神秘的Django坠机事件?,mysql,django,apache,profiling,Mysql,Django,Apache,Profiling,一个Django网站(托管在Web派系上)每月提供950k左右的页面浏览量,它正在经历崩溃,我还不知道如何调试。以不可预测的时间间隔(平均每天一次,但不是每天同一时间),对站点的所有请求都开始挂起/超时,使站点在我们重新启动Apache之前完全无法访问。这些请求以499的形式出现在前端访问日志中,但根本不出现在应用程序的日志中 在仔细查看服务器日志(包括django timelog生成的日志)时,我似乎找不到任何模式,在站点关闭之前,页面会被点击。在最近的一次崩溃中,所有在网站崩溃之前被点击的页

一个Django网站(托管在Web派系上)每月提供950k左右的页面浏览量,它正在经历崩溃,我还不知道如何调试。以不可预测的时间间隔(平均每天一次,但不是每天同一时间),对站点的所有请求都开始挂起/超时,使站点在我们重新启动Apache之前完全无法访问。这些请求以499的形式出现在前端访问日志中,但根本不出现在应用程序的日志中

在仔细查看服务器日志(包括django timelog生成的日志)时,我似乎找不到任何模式,在站点关闭之前,页面会被点击。在最近的一次崩溃中,所有在网站崩溃之前被点击的页面似乎都是标准的“呈现到响应”操作,使用的模板似乎非常简单,并且在其余时间都能正常工作。根据timelog,崩溃前的请求似乎不会花费更长的时间,而且我还没有能够通过负载测试有意地复制崩溃

WebPosition表示,这不是超出允许内存使用量的情况,否则他们会通知我们。需要注意的一点是,当我们恢复站点时,数据库并没有重新启动(只是应用程序/Apache)


您将如何着手调查此类重复出现的问题?似乎在某个地方一定有一行代码悬而未决-您对查找它的过程有什么建议吗?

因为在您可以复制崩溃之前,您无法真正描述故障条件,因此您可能需要使用
ab
()强制这种情况。如果不想对生产站点执行此操作,可以在子域中复制该站点。警告:
ab
可以打败服务器上的垃圾,所以RTM。您可能还想让WF管理员知道您将要做什么

更新评论:


我建议使用完全相同的机器,这样子域名才是唯一的区别。考虑到您使用的是另一台机器,有大量微妙(并非如此微妙)的环境因素可能会使您远离错误的显现。如果新机器还可以,并且如果您愿意在没有实际解决问题的情况下离开问题,那么您可以简单地将其作为您的生产机器并感到高兴。就我个人而言,我倾向于痴迷于这样的事情,但我也退休了,有足够的时间玩我的脚趾。:-)

由于在能够复制崩溃之前,您无法真正描述故障条件,因此可能需要使用
ab
()强制这种情况。如果不想对生产站点执行此操作,可以在子域中复制该站点。警告:
ab
可以打败服务器上的垃圾,所以RTM。您可能还想让WF管理员知道您将要做什么

更新评论:


我建议使用完全相同的机器,这样子域名才是唯一的区别。考虑到您使用的是另一台机器,有大量微妙(并非如此微妙)的环境因素可能会使您远离错误的显现。如果新机器还可以,并且如果您愿意在没有实际解决问题的情况下离开问题,那么您可以简单地将其作为您的生产机器并感到高兴。就我个人而言,我倾向于痴迷于这样的事情,但我也退休了,有足够的时间玩我的脚趾。:-)

我曾经遇到过这样的问题,这基本上归结为我对django中间件中的线程安全性的误解。基本上,django中间件是一个在所有线程之间共享的单线程,这些线程使用在我拥有的自定义中间件类上设置的值进行重击。我的解决方案是重写中间件,使其不使用已更改的实例或类属性,并将应用程序的关键部分切换到uwsgi服务器上,使其完全不使用线程,因为这似乎是我的应用程序的总体性能下降。当您有可能以不同间隔完成的视图(一些长时间运行的视图和一些快速视图)时,线程化uwsgi设置似乎工作得最好

我曾经遇到过这样的问题,这基本上归结为我对django中间件中的线程安全性的误解。基本上,django中间件是一个在所有线程之间共享的单线程,这些线程使用在我拥有的自定义中间件类上设置的值进行重击。我的解决方案是重写中间件,使其不使用已更改的实例或类属性,并将应用程序的关键部分切换到uwsgi服务器上,使其完全不使用线程,因为这似乎是我的应用程序的总体性能下降。当您有可能以不同间隔完成的视图(一些长时间运行的视图和一些快速视图)时,线程化uwsgi设置似乎工作得最好

您的站点有哪些外部依赖关系?它是否使用了有时无法访问的API?你有一个无限循环吗?它可以是任何数量的东西,这取决于你的应用程序有多复杂。我对gunicorn在webfaction上的表现比apache更感兴趣。您可能想尝试一下——它还有更多的调试工具,可以在您感到绝望时使用(包括能够跟踪选定模块中的每一行代码)。您的站点有哪些外部依赖关系?它是否使用了有时无法访问的API?你有一个无限循环吗?它可以是任何数量的东西,这取决于你的应用程序有多复杂。我对gunicorn在webfaction上的表现比apache更感兴趣。您可能想尝试一下,它还有更多的调试工具,可以在您感到绝望时使用(包括能够跟踪选定模块中的每一行代码)