Puncte:1

A trebuit doar să măresc timpul de expirare de la 30 de secunde la 60 de secunde pentru că nu îmi pot da seama de ce cererea noastră cea mai mare este atât de lentă. (Nginx + Php-fpm rulează pe gke)

drapel tr

Versiunea php-fpm: 7.4 Versiunea nginx: 1.19.0

Fugim pe gke, kubernetes; nodurile noastre au 10 procesoare și 24G de memorie RAM și solicităm 2 procesoare (limită de 3) la pod-urile noastre care rulează stiva noastră Laravel (nginx + php-fpm). Cele două servicii împart un pod, dar sunt containere separate (unul pentru nginx, unul pentru php). Motivul pentru care partajează un pod este că ne blochează rețeaua pentru a comunica php -> nginx de la pod-uri separate (obișnuiam să rulăm nginx / php în servicii / implementări separate)

În plus, nginx și php partajează o conexiune printr-un fișier partajat care este partajat ca volum: e

      - nume: php-socket
        emptyDir: {}
        volumMonturi:
        - nume: php-socket
          mountPath: /sock

aceasta părea a fi chiar mai bună decât o conexiune la rețea locală în pod și credem că este o practică bună.

Dar asta mă aduce la întrebarea mea: de ce această cerere specifică este atât de lentă? Știu că sunt multe date, dar nu este Date mare. Cred că este 3MB necomprimat, dar ajunge să iasă gzipped <1MB:

imagine care arată solicitări de 247 kB cu ori de 47 de secunde

Dar durează mult timp, peste timeout-ul inițial de 30 de ani.

Știam că ar fi mult în baza noastră de date să exportăm date de un an pentru 3000 de utilizatori, așa că memorăm acest răspuns în Redis.Și uitându-ne la jurnalele PHP, accesăm memoria cache și începem să returnăm răspunsul în mai puțin de 1/4s.

Undeva între php -> nginx -> client durează prea mult.

La început am crezut că este pentru că făceam gzipping o cantitate mare de date; dezactivarea gzip nu a ajutat. Chiar m-am gândit că ar trebui să facă tamponarea fișierelor pe care nginx ar trebui să o facă, așa că am actualizat discurile noastre de la 100 GB la 200 GB și chiar de la HDD la SSD. Asta nu a ajutat. Am învățat chiar în mod repetat că suntem adesea un caz limită atunci când vine vorba de configurare, așa că am încercat să setez fastcgi_buffers, proxy_buffers și gzip_buffers la valori de memorie nebun de mari:

    keepalive_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_connect_timeout 120;

    # Încercați o dimensiune mai mare a tamponului pentru încărcare mare a evaluărilor
    fastcgi_buffering activat;
    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;
    dimensiunea_buffer_proxy 4098k;
    proxy_busy_buffers_size 4098k;

    ##
    # Setări Gzip
    ##

    gzip on;
    gzip_disable „msie6”;
    gzip_vary on;
    gzip_proxied orice;
    gzip_comp_level 6;
    gzip_buffers 50000 4k;
    gzip_http_versiunea 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+ imagine xml/pictogramă x;

dar nici asta nu părea să ajute.

PHP slowlog:

[08-iul-2021 18:09:48] [pool www] pid 120 - - 
8 iulie 2021 @ 11:09:48.478 script_filename = /var/www/public/index.php - - 
8 iulie 2021 la 11:09:48.478 [0x00007fe3cc81baf0] runQueryCallback() /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:629 - - 
8 iulie 2021 la 11:09:48.478 [0x00007fe3cc81b9b0] run() /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:338 - - 
8 iulie 2021 la 11:09:48.478 [0x00007fe3cc81b910] select() /var/www/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2159 - - 
8 iulie 2021 la 11:09:48.478 [0x00007fe3cc81b860] runSelect() /var/www/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2147 - - 
8 iulie 2021 @ 11:09:48.478 [0x00007fe3cc81b760] Illuminate\Database\Query\{closure}() /var/www/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php -php:2619 
8 iulie 2021 @ 11:09:48.478 [0x00007fe3cc81b660] onceWithColumns() /var/www/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2148 - - 
8 iulie 2021 la 11:09:48.478 [0x00007fe3cc81b540] get() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:546 - - 
8 iulie 2021 la 11:09:48.478 [0x00007fe3cc81b3c0] getModels() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:530 - - 
8 iulie 2021 la 11:09:48.478 [0x00007fe3cc81b240] get() /var/www/vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php:143 - - 
8 iulie 2021 la 11:09:48.478 [0x00007fe3cc81b1b0] first() /var/www/app/Models/User.php:232 - - 
8 iulie 2021 @ 11:09:48.478 [0x00007fe3cc81b070] getAccountAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:454 
8 iulie 2021 @ 11:09:48.478 [0x00007fe3cc81afc0] mutateAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:350 - -php:350 
8 iulie 2021 @ 11:09:48.478 [0x00007fe3cc81ae90] getAttributeValue() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php: 
8 iulie 2021 la 11:09:48.478 [0x00007fe3cc81ada0] getAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1550 - - 
8 iulie 2021 la 11:09:48.478 [0x00007fe3cc81acb0] offsetExists() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1595 - - 
8 iulie 2021 la 11:09:48.478 [0x00007fe3cc81ac40] __isset() necunoscut:0 - - 
8 iulie 2021 la 11:09:48.478 [0x00007fff466902c0] ???() /var/www/app/Models/User.php:236 - - 
8 iulie 2021 la 11:09:48.478 [0x00007fe3cc81abb0] getAccountTypeAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:454. 
8 iulie 2021 la 11:09:48.478 [0x00007fe3cc81ab00] mutateAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:466 - -php:466 
8 iulie 2021 la 11:09:48.478 [0x00007fe3cc81aa40] mutateAttributeForArray() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes - -php:1111 
8 iulie 2021 @ 11:09:48.478 [08-Jul-2021 18:09:48] ANUNȚ: urma terminată de 120 - - 
8 iulie 2021 @ 11:09:48.477 [08-Jul-2021 18:09:48] AVERTISMENT: [pool www] copil 120, scriptul „/var/www/public/index.php” (solicitare: „GET / index.php?clientTimezone=America%2FLos_Angeles") se execută prea lentă (6,203325 sec), înregistrare - - 
8 iulie 2021 @ 11:09:48.477 [08-Jul-2021 18:09:48] ANUNȚ: copilul 120 oprit pentru urmărire - - 
8 iulie 2021 @ 11:09:48.477 [08-Jul-2021 18:09:48] ANUNȚ: pe cale de a urmări 120

Are cineva alte idei?

Michael Hampton avatar
drapel cz
Ai citit jurnalul lent? Indică foarte clar baza de date ca sursă a problemei. Acolo ar trebui să te uiți în continuare.
PoorBob avatar
drapel tr
Mulțumesc, am reușit să-mi dau seama că accesam baza de date de N ori pentru fiecare relație, chiar și răspunsul stocat în cache la serializarea Json pentru declarația finală de returnare
PoorBob avatar
drapel tr
Mai degrabă 3*N^2 sincer. Wow. Mult mai repede acum. Încărcăm răspunsul inițial de 46 de secunde în 2 secunde acum
Puncte:1
drapel tr

După ce mi sa spus să folosesc funcția php slow_log, am putut să văd că loveam baza de date în mod neașteptat, deoarece foloseam un răspuns în cache. Mai multe date erau încărcate cu nerăbdare după serializarea finală json pentru instrucțiunea return

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.