---- 编辑:问题解决了。不知何故,我的提供商似乎阻止了互联网测试。远程机器的测试以 1k r/s 成功 ---
我在 ubuntu 10.04.03 LTS 上运行了新编译的 Apache 2.2.1 版本。根服务器有 32GB RAM,是 i7-2600k。在内联网上的虚拟盒内,可以使用大致相同的硬件和软件进行测试。
虽然测试服务器运行良好,每秒可处理约 800 笔并发交易,但互联网上的“真实”服务器每秒仅处理约 15 笔交易。
使用以下命令对其运行围攻:sudo siege -b -c50 -d10 -i http:/... 服务器开始正常提供文件服务,但大约 20-40 秒后,它变得越来越慢,直到几乎停止。
unix top 显示 apache 进程开始扩展,但很快它们全部消失,而系统仅以 0.1 - 0.3 的平均负载运行,几乎没有使用任何资源。该进程占用大约 0-1% 的 CPU。
httpd.conf 的配置与测试服务器上的配置大致相同。我还尝试更改一些有意义的值,但没有帮助。
在遇到与 nginx 相同的问题后,我用 netperf 运行了网络基准测试,结果显示远程位置成功返回了 600MB/s,但内联网仅返回了 0.13MBs
有人知道如何解决这个问题吗?我维护 Linux 系统已有 10 年了,从未见过类似的事情。
感谢您的任何帮助!
答案1
我很好奇为什么你选择编译而不是使用为你的环境预先构建的包,你是否确保在系统上启用了交换?如果是 RHEL,你应该有物理+2G 交换(在你的情况下是 34G)。
是否配置并运行了任何奇怪的插件或不寻常的 mod_* 项目(java 等)?
在我看来,最有可能要查看的区域是确保您已正确编译了软件包(或使用来自您平台的公共存储库的软件包),并确保交换配置正确。
答案2
在我看来,您的网络中某处存在双工不匹配的情况。您将交换机硬设置为全双工,从而关闭了双工协商协议,并将服务器设置为自动协商双工。当它没有从交换机收到答复时,服务器默认为半双工,从而导致不匹配。这将导致您看到的可怕的网络性能。