【问题标题】:HTTP response performance drops under loadHTTP 响应性能在负载下下降
【发布时间】:2016-06-05 20:24:15
【问题描述】:

我使用以下 PHP 代码来测量 PHP / MySQL 脚本的执行时间。

$start = microtime(true);

/* any PHP with HTML output */ 

echo (microtime(true) - $start);

无论服务器负载如何,此测量始终会打印出相似的结果。各个页面的执行时间通常为 0.1 秒,完全不受服务器负载的影响。

但是当服务器处于某种负载下(100 个并发用户)时,每个页面需要几秒钟才能实际出现在浏览器中。根据这个观察,我假设 HTTP 服务器正在遭受性能下降,对吗?

我应该从哪里着手解决这个问题?

【问题讨论】:

  • 分散负载?分析您的代码?检查您的数据库索引/慢查询?哦,这么多不同的答案。
  • @jonstirling 我怀疑它与 PHP 或数据库有什么关系,因为执行时间一直都很低。它表现得好像将 HTTP 数据传输到客户端需要一段时间。会不会是低带宽问题?
  • 可以吗?当然,还有一长串其他事情。如果不实际查看减速的原因,您将无法真正了解发生了什么。
  • @jonstirling 那么我应该测量什么以及如何测量它?检查 HTTP 性能。除网站本身未在浏览器中按时显示外,任何其他测量结果均未显示任何下降。

标签: php mysql http


【解决方案1】:
  1. 在脚本的开头和结尾放置度量以测量所有 php 时间。

  2. 在您的网络服务器(Apache 或 Nignx)中启用时间记录。例如:https://lincolnloop.com/blog/tracking-application-response-time-nginx/

  3. 有多少个php进程?检查可能是您的请求在队列中等待免费的 php 工作者?尝试调整您的 php-fpm 网络服务器的设置(如果您使用它)。

【讨论】:

  • 1.是的,php 时间是完全从头到尾测量的。 2. 会做 3. phpMyAdmin 在高流量期间显示 12 个进程。由于 php 队列的问题,我从 Fast-CGI 切换到 nginx。我应该特别或一般地调整任何东西吗?
  • 3.取决于你的系统。同时运行的最大进程数约为 2*CPU 内核。您可以在 fpm 中设置更多进程,但它们会在 cpu 队列中等待,消耗更多内存。检查配置中的可用内存和限制。如果你试图使用比你拥有的更多的东西,你就会陷入交换。
  • 硬件还不是瓶颈。使用的是具有 24 个 vCore(负载为 15%)、120GB 内存(91GB 空闲)的根服务器,phpMyAdmin 始终显示交换使用率为 0%。这些数字来自最高流量时间段。另一个观察和测量是用 php 编写的 REST API,它与 iOS 应用程序通信。这个在同一台服务器上运行的 API 也完全没有性能下降。唯一可见的性能变化发生在需要在浏览器中加载网页时。
  • 尝试衡量页面处理的所有阶段。
猜你喜欢
  • 2018-11-16
  • 1970-01-01
  • 2021-01-27
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多