【发布时间】: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/…