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:
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?