php版本: 7.4 nginx版本: 1.19.0
我们在gke,kubernetes上运行;我们的节点有10个cpu和24G内存,我们向运行Laravel堆栈(nginx + php-fpm)的荚请求2个cpu(限制为3)。这两个服务共享一个pod,但是是单独的容器(一个用于nginx,一个用于php)。他们共享一个吊舱的原因是,它阻塞了我们的网络,以便从不同的吊舱(我们过去在不同的服务/部署中运行nginx / php )通信php -> nginx )。
此外,nginx和php通过作为卷共享的共享文件共享一个连接:e
- name: php-socket
emptyDir: {} volumeMounts:
- name: php-socket
mountPath: /sock这似乎比舱内的本地网络连接更好,我们认为这是一种最佳做法。
但这就引出了我的问题:为什么这一具体要求如此缓慢?我知道这是很多数据,但不是大数据。我相信它是未压缩的3MB,但最终出现gzipped <1MB:

但这需要很长的时间,超过我们最初的30年代的超时时间。
我们知道在我们的数据库中需要为3000名用户导出一年的数据,所以我们将这个响应缓存在Redis中。查看PHP日志,我们访问缓存并开始在不到1/4的时间内返回响应。
在php -> nginx ->客户端之间,等待时间太长了。
起初,我认为这是因为我们正在压缩大量数据;禁用gzip没有帮助。我甚至认为这是缓冲nginx的文件,所以我将我们的节点磁盘从100 it升级到200 it,甚至从HDD升级到SSD。这没什么用。我们甚至反复了解到,在配置方面,我们通常是边缘情况,因此我尝试将fastcgi_buffers、proxy_buffers和gzip_buffers设置为异常高的内存值:
keepalive_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_connect_timeout 120;
# Try higher buffer size for large assesment loading
fastcgi_buffering on;
fastcgi_buffers 50000 4k;
fastcgi_busy_buffers_size 4098k;
client_max_body_size 128M;
client_body_buffer_size 45M;
client_header_buffer_size 16k;
large_client_header_buffers 32 4k;
proxy_buffers 50000 4k;
proxy_buffer_size 4098k;
proxy_busy_buffers_size 4098k;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 50000 4k;
gzip_http_version 1.1;
gzip_min_length 64;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;但这似乎也没什么用。
PHP慢日志:
[08-Jul-2021 18:09:48] [pool www] pid 120 - -
Jul 8, 2021 @ 11:09:48.478 script_filename = /var/www/public/index.php - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81baf0] runQueryCallback() /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:629 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81b9b0] run() /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:338 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81b910] select() /var/www/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2159 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81b860] runSelect() /var/www/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2147 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81b760] Illuminate\Database\Query\{closure}() /var/www/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2619 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81b660] onceWithColumns() /var/www/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2148 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81b540] get() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:546 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81b3c0] getModels() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:530 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81b240] get() /var/www/vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php:143 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81b1b0] first() /var/www/app/Models/User.php:232 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81b070] getAccountAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:454 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81afc0] mutateAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:350 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81ae90] getAttributeValue() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:323 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81ada0] getAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1550 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81acb0] offsetExists() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1595 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81ac40] __isset() unknown:0 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fff466902c0] ???() /var/www/app/Models/User.php:236 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81abb0] getAccountTypeAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:454 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81ab00] mutateAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:466 - -
Jul 8, 2021 @ 11:09:48.478 [0x00007fe3cc81aa40] mutateAttributeForArray() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:111 - -
Jul 8, 2021 @ 11:09:48.478 [08-Jul-2021 18:09:48] NOTICE: finished trace of 120 - -
Jul 8, 2021 @ 11:09:48.477 [08-Jul-2021 18:09:48] WARNING: [pool www] child 120, script '/var/www/public/index.php' (request: "GET /index.php?clientTimezone=America%2FLos_Angeles") executing too slow (6.203325 sec), logging - -
Jul 8, 2021 @ 11:09:48.477 [08-Jul-2021 18:09:48] NOTICE: child 120 stopped for tracing - -
Jul 8, 2021 @ 11:09:48.477 [08-Jul-2021 18:09:48] NOTICE: about to trace 120还有人有其他的想法吗?
发布于 2021-07-08 19:37:59
一旦被告知要使用php slow_log函数,我就能够看到,由于我使用的是缓存的响应,所以我意外地访问了数据库。在返回语句的最终json序列化之后,更多的数据被急切地加载。
https://serverfault.com/questions/1069032
复制相似问题