我正在尝试解决 Apache 中一些奇怪的、间歇性的连接故障。当用户抱怨我们托管的 Web 应用程序的某些部分无法正常工作时,我注意到了这个问题。调试显示 AJAX 请求未返回 JavaScript 应用程序所期望的 XML 或 JSON 数据。该应用程序通过 SSL 提供服务。
当我自己测试时,我会看到间歇性故障,Firebug 会显示响应长度为零,或者连接似乎完全失败。服务器上的应用程序日志没有显示任何问题,包括当 Firebug 报告响应为空时——服务器上的应用程序日志显示数据已发送。
我突然启动了 apachebench ( ab
),并惊讶地发现一些连接失败:
[jnet@Stan ~]$ ab -v 1 -n 1000 -c 10 $url
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking workingman.smart-safe-secure.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: Apache/2.2.3
Server Hostname: workingman.smart-safe-secure.com
Server Port: 443
SSL/TLS Protocol: TLSv1/SSLv3,DHE-RSA-AES256-SHA,1024,256
Document Path: /
Document Length: 659 bytes
Concurrency Level: 10
Time taken for tests: 104.086 seconds
Complete requests: 1000
Failed requests: 2
(Connect: 2, Receive: 0, Length: 0, Exceptions: 0)
Write errors: 0
Total transferred: 945000 bytes
HTML transferred: 659000 bytes
Requests per second: 9.61 [#/sec] (mean)
Time per request: 1040.855 [ms] (mean)
Time per request: 104.086 [ms] (mean, across all concurrent requests)
Transfer rate: 8.87 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 356 844 215.7 840 2268
Processing: 68 194 138.9 128 1483
Waiting: 67 178 122.0 116 1426
Total: 494 1039 241.8 993 2623
Percentage of the requests served within a certain time (ms)
50% 993
66% 1039
75% 1101
80% 1162
90% 1407
95% 1492
98% 1626
99% 1718
100% 2623 (longest request)
这些请求针对的是静态 HTML 页面,因此我的 PHP 应用程序似乎不是问题所在。通过普通 HTTP(非 SSL)运行测试没有产生任何故障。我不知道可能发生了什么……甚至不确定如何从这里进行故障排除。我很乐意发布 httpd.conf 配置,只需让我知道哪些部分会有所帮助。服务器是 Apache/2.2.3(CentOS),带有 mpm_worker 和 mod_fastcgi...
更新:我刚刚进行了第一次 ab 测试,结果显示同一 HTML 页面通过普通 HTTP 连接失败 2 次。看来 SSL 并不是问题所在……
更新2:这可能是某种网络问题,因为我无法ab
在同一数据中心的服务器上复制此内容,也无法ab
在本地主机上复制此内容。但是从我的工作站 ping 有问题的服务器显示数据包丢失率为 0%...所以我不确定下一步该采取什么措施。
更新 3:如果有帮助的话,如果我ab
通过 SSH 隧道运行基准测试,则不会出现任何故障......所以这可能是网络问题而不是 apache 问题......
答案1
当您说当请求在同一个数据中心完成或使用 ssh 隧道时,它工作得很好时,我认为它可能是数据中心远程站点之间的某种整形。
例如,如果 icmp 和 ssh(和其他)比 http 优先级更高。因此,如果 WAN 变得过载,路由器可以丢弃 http 流量。通常,SSH 被优先考虑,因为它需要高交互性,而 FTP 的优先级较低,因为它是文件传输。
询问您的网络团队是否有任何整形或 QOS。
另一件事告诉我问题可能是连接时间从 356 到 2268。356 相当慢,我猜当使用 SSH 隧道时它比这要慢。并且最小值和最大值之间的差异如此之大告诉我一些数据包可能被丢弃(由于 QOS/Shaping)并且需要重新传输(因此连接时间较慢)