为什么请求频率下降时响应时间会爆炸?

Raf*_*ael 22 high-load apache-2.4 ubuntu-14.04


更正:响应时间 ( %D) 是 ?s 不是 ms!1

这并没有改变这种模式的怪异之处,但这意味着它实际上没有那么严重的破坏性。


为什么响应时间与请求频率成反比?

当服务器处理请求不那么忙时,它不应该响应更快吗?

任何建议如何让 Apache“利用”较少的负载?

在此处输入图片说明

这种模式是周期性的。这意味着如果展示次数低于每分钟约 200 个请求,它就会显示出来——这种情况从深夜到清晨发生(由于自然的用户活动)。


请求是非常简单的 POST,发送少于 1000 个字符的 JSON——这个 JSON 被存储(附加到一个文本文件)——就是这样。答案只是“-”。

图中显示的数据是用 Apache 本身记录的:

LogFormat "%{%Y-%m-%d+%H:%M:%S}t %k %D %I %O" performance
CustomLog "/var/log/apache2/performance.log" performance
Run Code Online (Sandbox Code Playgroud)

Bil*_*hor 31

这是数据中心的常见行为。响应时间缓慢的时间对应于通常称为批处理窗口的时间。这是预计用户活动较少且可以运行批处理的时间段。在此期间也会进行备份。这些活动可能会使服务器和网络的资源紧张,从而导致性能问题,如您所见。

有一些资源可能会导致问题:

  • CPU负载高。这可能会导致 Apache 等待一个时间片来处理请求。
  • 内存占用高。这可以刷新缓冲区,使 Apache 能够在不从磁盘读取资源的情况下提供资源。它还可能导致 Apache 工作人员的分页/交换。
  • 高磁盘活动。这可能会导致磁盘 I/O 活动排队,并在提供内容时出现相应的延迟。
  • 网络活跃度高。这可能会导致数据包排队等待传输,增加重试次数,否则会降低服务质量。

sar用来调查发出这样的。 atsar可用于将sar数据收集到日常数据文件中。可以检查这些以查看白天性能正常时和夜间性能变化时的系统行为。

如果您正在使用munin收集和绘制资源利用率图表的其他系统来监控系统,您可能会在那里找到一些指标。我还是觉得sar比较准确。

有喜欢的工具nice,并ionice可以应用到批量处理,以尽量减少其影响。它们仅对 CPU 或 I/O 问题有效。他们不太可能解决内存或网络活动的问题。

将备份活动移动到单独的网络可以减少网络争用。一些备份软件可以配置为限制将使用的带宽。这可以解决或减少网络争用问题。

根据批处理过程的触发方式,您可以限制并行运行的批处理过程的数量。这实际上可能会提高批处理的性能,因为它们可能会遇到相同的资源争用。


小智 8

如果请求发送者在提交新请求之前等待前一个请求完成,则这种关系可能会发生在另一个方向。在这种情况下,由于客户端排队,流量会随着请求时间的增长(无论出于何种原因)下降。

或者它可能是您的测量结果 - 如果上图显示已完成的请求,而不是到达的请求,随着请求处理时间的增长(假设容量有限:D),速率将下降。


abl*_*igh 7

尽管@BillThor 的回答可能是正确的,但低负载期间似乎不太可能完全被备份进程占用(即期间精确匹配)。

另一种解释是简单的缓存。如果给定的脚本/数据库/最近未使用过的任何内容,则相关的缓存数据可能已被删除,以便为操作系统的其余部分释放内存。这可能是数据库上的索引,或与文件相关的 O/S 缓冲区,或其他类似的东西。如果自上次查询以来已有一段时间,则查询将不得不重新构建此信息。在繁忙时期,这不会发生,因为最后一个查询会很频繁。这也可以解释为什么您在繁忙时段看到低响应时间高响应时间。