【问题标题】:PHP-FPM 7.4 sometimes hangs for a few requestsPHP-FPM 7.4 有时会因一些请求而挂起
【发布时间】:2020-12-13 19:43:39
【问题描述】:

各位开发者大家好,

我在生产站点 (laravel) 中遇到问题。有时(比如一小时 4-8 个请求)最简单的请求会导致这种错误:

[13-Dec-2020 18:07:07] WARNING: [pool www] child 514732, script '/home/****/****/public/index.php' (request: "GET /index.php") execution timed out (71.782847 sec), terminating

当我检查我的访问日志时,我发现这是最简单的请求。它甚至发生在没有执行 mysql 查询的请求中。当我查看内存使用情况时,有 1GB 可用。 CPU 以 10% 的速度运行。

  • 我使用 digitalocean 负载平衡器将流量重定向到服务器。
  • 每台服务器每分钟大约有 60-120 个请求
  • 我的所有服务器上都发生了这种情况(我有 4 个)
  • php 使用 opcache
  • mysql 托管在不同的服务器上
  • redis 托管在不同的服务器上
  • 我已尝试降低和提高 fpm childs

PHP fpm 设置

pm = dynamic
pm.max_children = 40
pm.start_servers = 15
pm.min_spare_servers = 15
pm.max_spare_servers = 25
;pm.process_idle_timeout = 10s;
pm.max_requests = 500

我希望你们能帮助我,我已经搜索了整个互联网,但没有任何效果。非常感谢。

提莫

【问题讨论】:

  • 执行的 PHP 代码怎么样?
  • 有时某些请求的查询通常会在 50 毫秒内返回响应。但有时也挂起:public function keepalive(){ return Array("status"=>200); }
  • 会不会是MySql的max_connections的原因?
  • 我可以看到有稳定的 20 个连接。我认为这不是问题,因为我找不到任何错误记录。当我断开与 mysql 的连接时,我将在 10 秒内收到 mysql 超时错误。
  • 您有任何 auto_prepend_file 吗?还是在执行第一行 PHP 之前真的有延迟?如果您排除了代码延迟,我建议您检查操作系统:MySQL 套接字、RAM 或最大打开文件数:stackoverflow.com/questions/3734932/…

标签: php fpm


【解决方案1】:

所以这是redis连接的问题。

解决方案是使用 tls1.2。

https://github.com/phpredis/phpredis/issues/1726

【讨论】:

    【解决方案2】:

    问题来自 Redis 与 TLS 1.3 的连接 (https://bugs.php.net/bug.php?id=79501) Redis 与 TLS 1.3 的连接不稳定。 如果你使用 tls 协议连接到 Redis,例如你的 Redis 主机是tls://your-redis-domain-here,PHP 将默认使用 TLS 1.3。要解决此问题,您必须在连接中指定 tlsv1.2,例如:tlsv1.2://your-redis-domain-here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 2017-09-18
      • 1970-01-01
      相关资源
      最近更新 更多