我们有一个高stream量的网站,在高峰期有1000并发用户,最less有100用户在同一时间。 平均每天有40,000到100,000访问。 这个问题有时会加载得非常慢(我们把这次命名为灾难时间 :)),那时候我们试图用Firefox加载网站,显示waiting... (我尝试了与世界各地的许多提供商一起)
我们在灾难时间监视服务器, CPU load , Memory Usage情况正常。 另外, MySQL查询日志缓慢,不会有任何查询长达1 sec 。 Apache没有任何错误。 iotop不显示任何导致此灾难的事情。
灾难时间和高峰时间没有任何关系是非常有趣的。 有时灾难发生在300并发用户,而另一个时间则不同。 我找不到他们之间的任何关系。
如何在灾难时间跟踪数据包? 我想知道这个灾难是我们的数据中心的故障(如上游或防火墙)或我们的服务器故障(如Apacheconfiguration,Web应用程序或其他任何我不知道的)。
对于其他数据只是添加评论,然后我编辑我的问题,以提供您需要回答的数据。
并发用户/访问的数量与系统的容量/性能无关 – 全部是关于并发连接以及这些请求正在做什么。
将请求响应时间添加到您的服务器日志将是一个开始 – 如果这些不反映问题,那么问题可能在networking上。 我注意到你在你的问题中没有提到你的web服务器日志 – 你检查了吗?
你认为你有很高的stream量,而你的问题意味着你只有一台服务器。 为什么? (多个服务器会增加这个特定的复杂性,例如负载分配,但也会简化大部分的诊断工作,但是对于性能和可用性来说,这并不是一件好事)。
跟踪连接数量及其状态也为诊断问题提供了必要的数据。
如何在灾难时间跟踪数据包?
使用数据包捕获程序 – 可以从客户端到服务器的任何地方运行。 我使用wireshark(可在Linux,MSWindows和其他)
如果你提到了你的服务器正在使用的版本/ MPM以及它运行的是什么操作系统,那将是非常有用的。
如果你使用Linux,你可以使用tcpdump ,例如:
$ tcpdump dst port 80
但我认为这不会有太大帮助。 我会尽量消除尽可能多的变数。 我的第一个想法是,这可能是一个networking问题。
尝试使用响应时间创buildApache日志,如下所示:
LogFormat "\"%{%Y-%m-%d %H:%M:%S}t\" %V %m \"%U\" \"%q\" %{Content-Type}o %s %B %O %D" responsetime CustomLog "/var/log/apache2/responsetime.log" responsetime
然后,尝试从同一台交换机上的机器/服务器上打开Web服务器。
如果这似乎是正常的,请尝试使用像time wget http://localhost/index.html -q --output-document=/dev/null在同一个盒子上。