我在负载均衡器后面有 2 个带有 mod_php 的 apache web 服务器,操作系统是 CentOS 6.x。它们应该是相同的。它们应该使用循环接收大致相同的请求。其中一个的表现比另一个差很多。
我认为它由于某种原因收到了更多请求:
- 事实并非如此。
- 这些请求的 URL 和数量大致相同,时间也大致相同。但性能却最差。
- 好吧,我决定在找到解决方案的同时帮助服务器。所以我重新配置了负载平衡器。
- 我对负载均衡器的配置更改是将请求发送到打开连接较少的服务器。此后,该服务器开始收到比第二台服务器更少的请求,并且与另一台服务器相比,性能仍然很差。为了强调差异,此时请求分布约为 ~35% 到 ~65%。一般来说,URL 请求比率大致相同。
- 现在,我以为两台服务器之间存在一些其他用户软件级别差异。但事实并非如此。
- 我们自动管理配置和代码。PHP 加载了相同的模块,Apache 也是如此。代码之间没有区别。
- 硬件是一样的。
- 作为补充信息,我们没有粘性会话。请求会随机定向到两个服务器。我们也对此进行了测试。配置更改后的不同之处在于,有问题的服务器收到的请求少了很多。
- 服务器在处理请求或连接到其他组件(如 DB)时没有任何有意义的时间差异。
鉴于此背景,请检查当前的 CPU 映像。出现问题的服务器: web1 图像 CPU 性能 请注意,红色表示系统 CPU 时间而不是用户,apache 是用户空间。还请注意,这些图像是在进行更改以减少对 web1(有问题)的请求之后拍摄的。之前我们有严重的 CPU 和平均负载问题,然后这是另一台服务器。Web2 图像 CPU 性能。未检测到 IO、RAM 或其他硬件问题。
这让我怀疑内核问题。top
似乎说的是同样的事情。Web1 与 Web2 图像性能对比
因为我找不到任何其他区别。实际上,我有足够的信息,因为服务器应该是相同的。BOSS 希望我在删除内核模块之前能够将此与实际问题联系起来。我尝试了一些东西,包括 perf,但没有成功。Perf( perf record -F 99 -a -g -- sleep 30
) 产生了这样的结果,但我真的不明白如何使用它或它如何帮助我定义结果。左边是 web1,右边是 web2。如果你看到它列出了占用 CPU 时间/百分比的调用,但我真的不知道它们是什么。
您是否同意这可能与内核模块有关?为什么是或不是?
有人能告诉我如何获取模块使用情况以及每个模块的 CPU 使用时间/百分比等统计数据吗?
还有什么我没有想到的事情吗?