首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不得不把超时时间从30岁增加到60岁,因为我不知道为什么我们最大的请求如此缓慢。(Nginx +Php运行在gke上)

我不得不把超时时间从30岁增加到60岁,因为我不知道为什么我们最大的请求如此缓慢。(Nginx +Php运行在gke上)
EN

Server Fault用户
提问于 2021-07-08 16:39:01
回答 1查看 1.1K关注 0票数 1

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

代码语言:javascript
复制
      - name: php-socket
        emptyDir: {}
代码语言:javascript
复制
        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设置为异常高的内存值:

代码语言:javascript
复制
    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慢日志:

代码语言:javascript
复制
[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

还有人有其他的想法吗?

EN

回答 1

Server Fault用户

发布于 2021-07-08 19:37:59

一旦被告知要使用php slow_log函数,我就能够看到,由于我使用的是缓存的响应,所以我意外地访问了数据库。在返回语句的最终json序列化之后,更多的数据被急切地加载。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1069032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档