【问题标题】:Server load is minimal but website responds poorly服务器负载最小,但网站响应不佳
【发布时间】:2018-05-31 07:51:02
【问题描述】:

我在 hetzner 上有 VPS。服务器位于德国。

它有 256GB RAM,6 个 CPU(12 个线程)。

我有一个文件,从昨天开始,它在一秒钟内被请求了大约 30 次。文件有 2 个选择、2 个更新、2 个插入查询,所以我假设(不确定这是如何工作的)来自这个文件服务器的每秒大约有 180 个请求。因此,在此请求开始后,服务器上的所有网站都开始加载不佳。我让这个文件只运行一个选择查询然后死掉。这没有帮助。在 WHM 中,负载约为 0.02。

我检查了错误日志,没有 max_user_connection 或任何错误。

我已启用慢查询日志并检查日志文件。什么都没有(我已经用 select sleep(10) 对其进行了测试,并且记录了这个查询)。

这是访问统计,请关注5月30日:

过去 24 小时的带宽统计数据:

ssl_log 中有很多这样的错误(当然是不同的 IP):

188.121.206.150 - - [30/May/2018:19:50:03 +0200] “-” 408 - “-” “-”

我在网上搜索了很多,但找不到任何解决方案。谁能至少告诉我应该监控什么或在哪里。我可以完全访问服务器内部可能存在的任何内容。任何帮助表示赞赏。

更新 1

我有子域:banners.analyticson.com(现在允许访问),那里有所有请求的图像和 html5 文件。 以一张图片为例:https://banners.analyticson.com/img/suy8G1S6RU.jpg

加载时间过长。正如我所注意到的,这个子域有一些问题。 我之前提到的脚本(有 6 个查询)只是尝试将其中一个横幅发送给用户,因此该脚本的结果是从 banners.analyticson.com 返回一个横幅。

更新 2

我检查了我的脚本,没问题。完成时间不到 1 秒。 我还检查了 Top 命令并且有结果。我不确定 $MEM 值是否合适。

【问题讨论】:

  • 您的页面是否正确关闭并在使用后尽快处理任何数据库连接?
  • @Paddy 我的脚本中确实写了mysqli_close($conn),如果你指的是那个。如果没有,请提供一些信息,我可以在哪里监控您所说的连接。
  • @Paddy 我刚刚检查了show status where variable_name` = 'Connections'` 和 Connections 值是 57337 但正如我所读到的,它不是同时连接。查询: Show global status like '%Thread%' 似乎还不错。缓存线程为 2,已连接线程:3,已创建线程:5,正在运行:1

标签: apache performance mysqli load-time


【解决方案1】:

你将不得不缩小问题范围......

存在多个潜在问题。

首先要消除的是您的新脚本在开发笔记本电脑上的性能 - 我假设您使用的是 PHP,因此请使用 profiling tools 来确定发生了什么。如果是数据库查询,您将通过探查器查看是哪一个。

如果您的 PHP 脚本和数据库查询没问题,接下来要看的是:听起来您的基础设施遇到了瓶颈资源。在这些情况下,作为单个请求运行良好的脚本开始排队等待瓶颈资源,并且每个新请求都会添加到队列中,直到整个服务器开始爬网。这可能有点谜 - 从top 开始并继续挖掘。

接下来,我会查看configuration of Apache 以确保一切都非常干净 - Apache 曾经默认为每个请求执行反向 DNS 查找,这会大大降低服务器在生产时的速度。您可能还想查看您的 SSL 配置 - 您报告的错误链接到 load balancer issue

如果它不像内存、CPU 等那么简单,那么您就会遇到更深奥的问题。您可能需要增加负载测试台,这样您就可以在不影响实时站点的情况下进行实验 - 通常,我在尽可能类似于实时的机器上执行此操作,使用 Apache JMeter 生成负载,并找到“拐点” .通常,您会看到响应时间随着并发请求的数量线性增加,直到您遇到瓶颈资源,此时响应时间迅速增加。举个简单的例子,如果你有 10 个可用的数据库连接,响应时间应该线性增加至 10 个并发连接,然后从 11 个开始变得更大。

知道拐点在哪里并能够重新创建它允许您在负载下使用PHP profiling tools。这是很多的工作。

更新

你正在使用 php-cgi;这很容易成为运行 PHP 脚本的最低效的方式。您的服务器几乎没有出汗 - CPU 和内存基本上是空闲的。 Here's 如何运行 PHP 的比较;考虑换成​​ mod_php。

【讨论】:

  • 感谢您的回答。我检查了脚本,没问题,我检查了顶部,我不确定。你能看看更新的问题吗?我现在正在检查 apache 配置。
  • 我认为你的更新做到了。 mod_php(EA4 中的 DSO)帮助很大。更改后它只会缓存我的 iframe,但这很容易修复。非常感谢内维尔。
  • 不是我有另一个问题。通过 SSL 检索数据时,处理时间过长。 HTTP 工作得很好。我已经多次查看您的建议,但没有运气。您能否提供一些有关如何解决此问题的其他信息?
  • 请打开一个新问题,并提供尽可能多的信息 - “太长”有多长?你试过什么?你能分享一些我们可以查看的 SSL URL 吗?
猜你喜欢
  • 1970-01-01
  • 2015-08-24
  • 1970-01-01
  • 2018-11-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 2013-08-12
相关资源
最近更新 更多