php - MySQL 和 PHP 很好,但 Web 服务很慢

标签 php mysql rest web-services nginx

所以我有一个 REST Web 服务,有很多用户(~50k)和很多在线用户,最近我遇到了一个问题并且无法修复它, 网络服务变得非常慢!

当我与 postman 核实时,1 个请求需要 1-4 秒! 我用消化慢日志检查了 MySQL,它工作正常(所有请求都在 100 毫秒或更短的时间内完成) 我还检查了 PHP:

$time = microtime(TRUE);
$mem = memory_get_usage();
//code here
print_r(array(
  'memory' => (memory_get_usage() - $mem) / (1024 * 1024),
  'seconds' => microtime(TRUE) - $time
));

而且它真的很快,所以在我看来 PHP 和 DB 都很好,但整个 Web 服务变得非常慢! 不知道如何识别和解决问题

注释:

6GB 内存(MySQL 占用了我设置的一半,另一半是 buff/catch)

6 核(MySQL 用户 ~100-150% = 1-1.5 核)

硬盘未满:)

CENTOS 7 - nginx - PLESK - php 7

最佳答案

每秒 500 个请求的持续负载并不是轻负载。如果这些请求没有或只有极少数超时,则您可能已经充分调整了 Web 服务器配置。为什么?当基于 Linux 的 Web 服务器发出 listen(2) 时request 它为传入请求设置了几个队列。这些请求会等待,直到服务器中的某些工作人员开始使用 accept(2)以便开始回应他们。

1.4 秒的响应时间可能主要花在其中一个监听队列上。

您可以尝试调整 nginx 以应对重负载。通过调整它接受的连接数量等内容,您也许可以从中获得更多性能。

您应该检查 Web 服务运行的代码,看看它是否包含任何不必要的内容。它是否从文件系统读取任何文件?您的目标是这样的:一旦您的 php 代码开始处理请求,它应该能够使用尽可能少的共享资源(MySQL 查询、文件读取等)来完成它。如果处理请求的 php 实例必须彼此等待很长时间,您的系统将会变慢。

您的 php-to-MySQL 连接方案是否使用连接池。确保你使用它。 mysqli_PDO 都提供连接池,但是您可以采取一些措施(即使是错误的)来击败连接池。

在这种情况下,许多人会通过添加更多 Web 服务器计算机来扩展服务器配置。您可以使用循环 DNS,也可以了解 nginx 的负载均衡功能。

关于php - MySQL 和 PHP 很好,但 Web 服务很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46497613/

相关文章:

php - 使用 Xampp 1.7.4 设置 Phppgadmin 5.0.2

mysql - 如何进行sql查询以按id添加计算值组?

ruby - 如何使用 Ruby (Watir/WebDriver) 捕获 GET 调用?

php - 调用未定义函数 Illuminate\Filesystem\finfo_file()

php - 使用POST方法将表单中的数据插入mysql

php - 如何在php中设置http响应状态码和消息

mysql - MySQL 中何时使用单引号、双引号和反引号

java - 以编程方式创建架构时出现未知数据库异常?

java - Mongo DB Rest API 中 ObjectId 的十六进制表示无效

angularjs - Angular 谷歌地图 - ng-repeat