รุ่น php-fpm: 7.4
เวอร์ชัน nginx: 1.19.0
เราทำงานบน gke, kubernetes; โหนดของเรามี 10 cpu และ 24G ของ ram และเราขอ 2 CPU (จำกัด 3) ไปยังพ็อดของเราที่รัน Laravel stack (nginx + php-fpm) บริการทั้งสองใช้พ็อดร่วมกัน แต่เป็นคอนเทนเนอร์แยกต่างหาก (หนึ่งรายการสำหรับ nginx หนึ่งรายการสำหรับ php) เหตุผลที่พวกเขาแชร์พ็อดเพราะมันอุดตันเครือข่ายของเราในการสื่อสาร php -> nginx จากพ็อดแยกต่างหาก (เราเคยเรียกใช้ nginx / php ในบริการ / การปรับใช้แยกต่างหาก)
นอกจากนี้ nginx และ php แชร์การเชื่อมต่อผ่านไฟล์ที่แชร์ซึ่งแชร์เป็นวอลุ่ม: e
- ชื่อ: php-socket
ว่างเปล่าDir: {}
ปริมาณการติดตั้ง:
- ชื่อ: php-socket
mountPath: /sock
ซึ่งดูเหมือนจะดีกว่าการเชื่อมต่อเครือข่ายท้องถิ่นภายในพ็อด และเราเชื่อว่าเป็นแนวทางปฏิบัติที่ดีที่สุด
แต่นั่นทำให้ฉันมีคำถาม: ทำไมคำขอนี้จึงช้ามาก ฉันรู้ว่ามันเป็นข้อมูลจำนวนมาก แต่ก็ไม่ ข้อมูลใหญ่. ฉันเชื่อว่ามันไม่บีบอัดขนาด 3MB แต่สุดท้ายก็ออกมา gzipped <1MB:
แต่ใช้เวลานานกว่าระยะหมดเวลา 30 วินาทีเดิมของเรา
เราทราบดีว่าฐานข้อมูลของเราจะต้องใช้เวลามากในการส่งออกข้อมูลมูลค่าหนึ่งปีสำหรับผู้ใช้ 3,000 ราย ดังนั้นเราจึงแคชการตอบสนองนี้ใน Redisและเมื่อดูที่บันทึก PHP เราจะเข้าถึงแคชและเริ่มส่งคืนการตอบสนองในเวลาน้อยกว่า 1/4 วินาที
ที่ไหนสักแห่งระหว่าง php -> nginx -> ลูกค้าใช้เวลานานเกินไป
ตอนแรกฉันคิดว่าเป็นเพราะเรากำลังบีบอัดข้อมูลจำนวนมาก การปิดใช้งาน gzip ไม่ได้ช่วยอะไร ฉันเคยคิดด้วยซ้ำว่า nginx อาจต้องทำเพื่อบัฟเฟอร์ไฟล์ ดังนั้นฉันจึงอัปเกรดโหนดดิสก์ของเราจาก 100GB เป็น 200GB และแม้แต่จาก HDD เป็น 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 50,000 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 50,000 4k;
proxy_buffer_size 4098k;
proxy_busy_buffers_size 4098k;
##
# การตั้งค่า Gzip
##
เปิด gzip;
gzip_disable "msie6";
gzip_vary บน;
gzip_proxyed ใด ๆ ;
gzip_comp_level 6;
gzip_buffers 50,000 4k;
gzip_http_version 1.1;
gzip_min_length 64;
ข้อความ gzip_types/ข้อความล้วน/แอปพลิเคชัน css/แอปพลิเคชัน json/ข้อความ x-javascript/แอปพลิเคชัน xml/แอปพลิเคชัน xml/xml+ข้อความ rss/แอปพลิเคชันจาวาสคริปต์/แอปพลิเคชัน vnd.ms-fontobject/แบบอักษร x-font-ttf/ภาพ opentype/svg+ รูปภาพ xml/x-icon;
แต่สิ่งนี้ดูเหมือนจะไม่ช่วยเช่นกัน
บันทึกการทำงานช้าของ 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] OnceWithColumns() /var/www/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2148 - -
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()known: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 ก.ค. 2564 @ 11:09:48.478 [08-ก.ค.-2564 18:09:48 น.] ประกาศ: เสร็จสิ้นการติดตามของ 120 - -
8 ก.ค. 2021 @ 11:09:48.477 [08-ก.ค.-2021 18:09:48 น.] คำเตือน: [pool www] child 120, script '/var/www/public/index.php' (คำขอ: "GET / index.php?clientTimezone=America%2FLos_Angeles") ดำเนินการช้าเกินไป (6.203325 วินาที) การบันทึก - -
8 ก.ค. 2564 @ 11:09:48.477 [08-ก.ค.-2564 18:09:48 น.] ประกาศ เด็ก 120 หยุดติดตาม - -
8 ก.ค. 2564 @ 11:09:48.477 [08-ก.ค.-2564 18:09:48 น.] ประกาศ: กำลังจะแกะรอย 120
ใครมีไอเดียอื่นอีกไหม?