奇怪的apache请求滞后



我有一个Apache2和Django(mod_wsgi)设置,它提供了一个RESTful API。为此,我有一组自动化测试,按顺序执行大约1000个API请求(纯httpGET/POST/PUT/DELETE)。

问题是,大约每80个请求,我就会有一个奇怪的延迟/超时,时间正好是5秒或10秒。请参阅此处的时间戳示例:

Request 1:  2013-08-30T03:49:20.915
Response 1: 2013-08-30T03:49:30.940
Request 2:  2013-08-30T03:50:32.559
Response 2: 2013-08-30T03:50:37.597

我不明白为什么会发生这种事。我有一个带有KeepAliveOff的apache配置(Django的推荐设置),但在其他方面是Ubuntu 12.04 LTS的标准安装。

我在Web服务器所在的同一台服务器上运行测试,我最初认为这是某种DNS缓存,但我已经将我请求的主机名添加到/etc/hosts,但问题仍然存在。

当这种滞后/超时发生时,系统处于空闲状态,并且有大量的cpu和内存。滞后并不是特定于某个请求(URL)的,它看起来有点随机。

考虑到它总是精确到毫秒5秒或10秒,感觉这是某个特定的设置造成的。

如果它提供了一些见解,请观看我在PyCon US的演讲。

  • http://lanyrd.com/2013/pycon/scdyzk/

演讲涉及流程变动和启动成本等问题。你不应该做的一件事是,如果你真的不需要,设置最大请求量

还可以考虑尝试NewRelic来帮助诊断问题所在。如果这是后端服务基础设施的web应用程序问题,这将省去很多猜测。

至于这种监控有什么帮助,请看我的另一场PyCon演讲。

  • http://lanyrd.com/2012/pycon/spcdg/

这是一个DNS问题,将我在本地使用的域名添加到/etc/hosts实际上解决了这个问题。我只是没有重新启动服务器以使更改生效,以为重新启动网络会解决这个问题,但显然不是。

最新更新