间歇性响应缓慢和超时 – Apache + mod_wsgi + Web2py

我已经在具有2×2.4GHzCPU和4GB物理内存的数字海洋液滴上安装了Ubuntu 14.04.5 LTS(i686)。 我正在Apache和mod_wsgi上运行一个web2py应用程序。 还有一些额外的Python模块安装在盒子上,如numpy和opencv2。 数据库是MySQL 5.5。

另一台服务器上的WordPress网站使用php-curl调用这个web2py应用程序 。 通常响应时间是2-5秒。 但偶尔会超时(响应时间大于1000秒)。 我在Web2py应用程序中添加了日志logging点,他们告诉我们,在到达应用程序后,所有事情都会在2-3秒内完成。 但是在Apache2访问日志中,响应时间logging为高于1000秒的数字。 在访问日志中,当从Wordpress网站发起请求时请求时间大致相同。

任何人都可以指出如何找出这种间歇性慢响应的原因吗?

谢谢

为了发现超时的根本原因,你可以使用php slowlog,这将解释哪个函数负责。

您必须修改您的www.conf并更改选项request_slowlog_timeout默认值0 。 例如 :

 request_slowlog_timeout = 10s 

您可以阅读更多关于在这里激活slowlog的内容,并在这里看看一些常见的缓慢来源。

最后,我已经能够找出问题的原因。 它是web2py应用程序的默认模型文件中的远程数据库的连接语句。 这个数据库连接没有在应用程序的任何地方使用。 但是,由于它是在模型文件中,无论何时调用控制器函数,应用程序都会尝试不必要地连接到该远程数据库。

最初,我在应用程序的每个地方都添加了日志logging点,但是没有添加应用程序的默认模型文件; 因此,日志没有说明根本原因。 然后,我通过用演示应用程序(随web2py附带)的文件逐个replace应用程序文件夹的内容来testing应用程序,并帮助揭示问题的根源。 然后通过在应用程序的默认模型文件的开始和结束处添加日志logging来validation根本原因。