解决 Apache 连接失败问题

解决 Apache 连接失败问题

我正在尝试解决 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)并且需要重新传输(因此连接时间较慢)

相关内容