версия php-fpm: 7.4
версия нгинкс: 1.19.0
Работаем на gke, kubernetes; наши узлы имеют 10 процессоров и 24 ГБ оперативной памяти, и мы запрашиваем 2 процессора (ограничение 3) для наших модулей, которые запускают наш стек Laravel (nginx + php-fpm). Два сервиса имеют общий модуль, но являются отдельными контейнерами (один для nginx, один для php). Причина, по которой они используют общий модуль, заключается в том, что он засоряет нашу сеть для связи php -> nginx из отдельных модулей (мы использовали nginx / php в отдельных службах/развертываниях).
Кроме того, nginx и php совместно используют соединение через общий файл, который используется как том: e
- имя: php-сокет
пустойКаталог: {}
томМаунты:
- имя: php-сокет
Путь монтирования: / носок
это казалось даже лучше, чем подключение к локальной сети внутри модуля, и мы считаем, что это лучшая практика.
Но это подводит меня к моему вопросу: почему этот конкретный запрос такой медленный? Я знаю, что это много данных, но это не так. большие данные. Я полагаю, что это 3 МБ без сжатия, но в итоге получается gzip <1 МБ:
Но это занимает много времени, больше нашего первоначального таймаута в 30 секунд.
Мы знали, что в нашей базе данных будет слишком много данных для экспорта данных за год для 3000 пользователей, поэтому мы кэшируем этот ответ в Redis.И глядя на журналы PHP, мы получаем доступ к кешу и начинаем возвращать ответ менее чем за 1/4 секунды.
Где-то между php -> nginx -> клиент занимает слишком много времени.
Сначала я подумал, что это из-за того, что мы сжимаем большой объем данных; отключение gzip не помогло. Я даже подумал, что это может быть буферизация файлов, которую может выполнять nginx, поэтому я обновил наши нод-диски со 100 ГБ до 200 ГБ и даже с жесткого диска на SSD. Это не помогло. Мы даже неоднократно узнавали, что мы часто являемся крайним случаем, когда дело доходит до конфигурации, поэтому я попытался установить для fastcgi_buffers, proxy_buffers и gzip_buffers безумно высокие значения памяти:
keepalive_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_connect_timeout 120;
# Попробуйте увеличить размер буфера для загрузки больших оценок
fastcgi_buffering включен;
fastcgi_buffers 50000 4k;
fastcgi_busy_buffers_size 4098 КБ;
client_max_body_size 128M;
client_body_buffer_size 45M;
client_header_buffer_size 16 КБ;
large_client_header_buffers 32 4k;
proxy_buffers 50000 4k;
proxy_buffer_size 4098k;
proxy_busy_buffers_size 4098k;
##
# Настройки Gzip
##
gzip включен;
gzip_disable "msie6";
gzip_vary включен;
gzip_proxy любой;
gzip_comp_level 6;
gzip_buffers 50000 4k;
gzip_http_версия 1.1;
gzip_min_length 64;
gzip_types text/обычный текст/приложение css/приложение json/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+ xml-изображение/x-иконка;
но это тоже не помогло.
Медленный журнал PHP:
[08-Jul-2021 18:09:48] [pool www] pid 120 - -
8 июля 2021 г., 11:09:48.478 script_filename = /var/www/public/index.php - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81baf0] runQueryCallback() /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:629 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81b9b0] run() /var/www/vendor/laravel/framework/src/Illuminate/Database/Connection.php:338 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81b910] select() /var/www/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2159 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81b860] runSelect() /var/www/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2147 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81b760] Illuminate\Database\Query\{closure}() /var/www/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2619 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81b660]
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81b540] get() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:546 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81b3c0] getModels() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:530 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81b240] get() /var/www/vendor/laravel/framework/src/Illuminate/Database/Concerns/BuildsQueries.php:143 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81b1b0] first() /var/www/app/Models/User.php:232 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81b070] getAccountAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:454 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81afc0] mutateAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:350 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81ae90] getAttributeValue() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:323 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81ada0] getAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1550 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81acb0] offsetExists() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1595 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81ac40] __isset() неизвестно:0 - -
8 июля 2021 г., 11:09:48.478 [0x00007fff466902c0] ???() /var/www/app/Models/User.php:236 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81abb0] getAccountTypeAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:454 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81ab00] mutateAttribute() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:466 - -
8 июля 2021 г., 11:09:48.478 [0x00007fe3cc81aa40] mutateAttributeForArray() /var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasAttributes.php:111 - -
8 июля 2021 г., 11:09:48.478 [08-Jul-2021 18:09:48] ВНИМАНИЕ: завершена трассировка 120 - -
8 июля 2021 г., 11:09:48.477 [08-Jul-2021 18:09:48] ВНИМАНИЕ: [pool www] child 120, script '/var/www/public/index.php' (запрос: "GET / index.php?clientTimezone=America%2FLos_Angeles") выполняется слишком медленно (6,203325 с), протоколирование - -
8 июля 2021 г., 11:09:48.477 [08-Jul-2021 18:09:48] ВНИМАНИЕ: ребенок 120 остановлен для отслеживания - -
8 июля 2021 г. @ 11:09:48.477 [08-Jul-2021 18:09:48] ВНИМАНИЕ: собирается отследить 120
У кого-нибудь есть другие идеи?