Score:1

ฉันต้องเพิ่มระยะหมดเวลาของเราจาก 30 วินาทีเป็น 60 วินาที เพราะฉันไม่เข้าใจว่าทำไมคำขอที่ใหญ่ที่สุดของเราจึงช้ามาก (Nginx + Php-fpm ทำงานบน gke)

ธง tr

รุ่น 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:

ภาพแสดงคำขอ 247 kB ด้วยเวลา 47 วินาที

แต่ใช้เวลานานกว่าระยะหมดเวลา 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

ใครมีไอเดียอื่นอีกไหม?

Michael Hampton avatar
cz flag
คุณอ่านบันทึกช้าหรือไม่? มันชี้ไปที่ฐานข้อมูลของคุณอย่างชัดเจนว่าเป็นต้นตอของปัญหา นั่นคือที่ที่คุณควรดูต่อไป
PoorBob avatar
tr flag
ขอบคุณ ฉันเพิ่งทราบได้ว่าเรากำลังกดฐานข้อมูล N ครั้งสำหรับแต่ละความสัมพันธ์ แม้กระทั่งการตอบสนองที่แคชเมื่อ Json Serialization สำหรับคำสั่งส่งคืนสุดท้าย
PoorBob avatar
tr flag
เหมือนกับ 3*N^2 จริงๆ ว้าว. ตอนนี้เร็วขึ้นมาก ขณะนี้เรากำลังโหลดการตอบสนอง 46s ดั้งเดิมใน 2 วินาที
Score:1
ธง tr

เมื่อได้รับคำสั่งให้ใช้ฟังก์ชัน php slow_log ฉันพบว่าฉันชนฐานข้อมูลโดยไม่คาดคิด เนื่องจากฉันใช้การตอบกลับแบบแคช มีการโหลดข้อมูลเพิ่มเติมอย่างกระตือรือร้นหลังจากข้อเท็จจริงในการทำให้เป็นอันดับสุดท้ายของ json สำหรับคำสั่งส่งคืน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา