更正:响应时间 ( %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
这是数据中心的常见行为。您的响应时间变慢的时间对应于通常所说的批处理窗口。这是预计用户活动较低且可以运行批处理的时间段。在此期间也会进行备份。这些活动可能会使服务器和网络资源紧张,从而导致性能问题,如您所见。
有一些资源可能会导致问题:
我
sar
用来调查这样发出的。atsar
可用于将sar
数据收集到日常数据文件中。可以检查这些以查看系统行为在白天性能正常时和夜间性能变化时的情况。如果您正在使用
munin
收集和绘制资源利用率图表的其他系统来监控系统,您可能会在那里找到一些指标。我还是觉得sar
更准确。有一些类似的工具
nice
可以ionice
应用于批处理,以尽量减少它们的影响。它们仅对 CPU 或 I/O 问题有效。它们不太可能解决内存或网络活动的问题。将备份活动移至单独的网络可以减少网络争用。一些备份软件可以配置为限制将使用的带宽。这可以解决或减少网络争用问题。
根据触发批处理的方式,您可以限制并行运行的批处理数量。这实际上可能会提高批处理过程的性能,因为它们可能会遇到相同的资源争用。
如果请求发送者在提交新请求之前等待先前请求完成,则这种关系可能会在另一个方向发生。在这种情况下,由于客户端排队,流量会随着请求时间的增长(无论出于何种原因)而下降。
或者它可能是您的测量结果 - 如果上图显示已完成的请求,而不是到达的请求,则速率将随着请求处理时间的增长而下降(假设容量有限:D)。
尽管@BillThor 的回答可能是正确的,但低负载时段似乎不太可能完全被备份进程占用(即时段精确匹配)。
另一种解释是简单的缓存。如果最近没有使用给定的脚本/数据库/任何东西,则相关的缓存数据可能已被删除,以便为操作系统的其余部分释放内存。这可能是数据库上的索引,或与文件相关的 O/S 缓冲区,或其他类似的东西。如果自上次查询以来已经有一段时间,查询将不得不重新构建此信息。在繁忙时期,这不会发生,因为最后一次查询会很频繁。这也可以解释为什么您在繁忙期间看到响应时间短而响应时间长。
在我看来,你在那里看到的看起来可能是一个统计问题。可能不是,@BillThor 的回答很可能是正确的,但为了完整起见,我会发布这个。
响应时间图是基于百分位的。800-1000 个请求的样本池是一个很好的样本计数,50-100 个请求的池可能没有那么多。
如果您假设慢请求的数量不是请求量的线性函数,即请求增加一个数量级不会导致慢请求增加一个数量级,那么更高的请求量将导致较低的平均请求时间。
有谎言,大谎言和统计数据。
我的假设:您有三个不同类别的请求:
晚上每分钟50个请求对应20+20+10。因此,50% 百分位数的结果现在很大程度上取决于流 2 的结果。而 95% 百分位数取决于流 3,因此它甚至永远不会显示在图表上。
白天,流 2+3 很好地隐藏在 95% 百分位之上。
我越看越倾向于认为数据收集有问题。
首先,您的 TPS 发生了一些非常奇怪的事情。虽然整体模式看起来很正常,但在晚上 9 点左右出现了一个非常急剧的突破,然后在早上 7 点左右再次出现。在过渡到非高峰时段期间,正常图表会更加平滑。
这表明配置文件发生了变化,您可能有两种不同类型的客户:
第二个提示是 18:00 左右。之前和之后的大部分时间,我们都有高容量配置文件——高 TPS 和低延迟。但在 18:00 左右,从 800-1000 RPM 突然下降到低于 400 RPM。什么可能导致这种情况?
第三个提示是第 5 个百分位响应时间的递减。实际上,我更喜欢查看最小响应时间(但第 5 个百分位数可能更好),原因有两个:它告诉我服务时间(即响应时间减去排队),响应时间倾向于遵循 Weibull 分布,这意味着模式(或最常见的值)略高于最小值。
所以第 5 个百分位的降级对我来说意味着系列突然中断,服务时间实际上已经下降,尽管方差和平均响应时间都大大增加了。
下一步
在这个阶段,我会深入研究日志,以找出 18:00 的低容量样本与之前和之后的高容量样本有何不同。
我会寻找:
顺便说一句,18:00 的“事件”对我来说已经足够证明它与数据中心的拥塞/活动无关。要做到这一点,拥堵必须导致 TPS 下降,这在 18:00 是可能的,但极不可能导致 TPS 在晚上 9 点到早上 7 点之间的 10 小时内持续且平稳地下降。