Score:1

uWSGI ยกเลิกการตอบกลับ สูญเสียการเชื่อมต่อกับ nginx

ธง gb

ฉันใช้เว็บแอปพลิเคชันขนาดเล็กที่เขียนด้วย Python ทำงานใน uWSGI และให้บริการผ่าน nginx มีคอมโพเนนต์ที่สร้างไฟล์ ZIP สำหรับดาวน์โหลด ซึ่งบางครั้งอาจมีขนาดค่อนข้างใหญ่ (หลาย GB) บ่อยครั้งที่การเชื่อมต่อระหว่าง nginx และ uWSGI ขาดและคำขอถูกยกเลิก nginx ละเว้นการตอบสนองที่ถูกตัดทอนในขณะที่เบราว์เซอร์เข้าสู่ระยะหมดเวลาเนื่องจากยังคงเปิดการเชื่อมต่ออยู่ โดยคาดว่าจะได้รับข้อมูลการตอบสนองมากขึ้น แอปพลิเคชันสร้างส่วนหัวของความยาวเนื้อหาที่เหมาะสม

จากบันทึก uWSGI:

uwsgi_response_write_body_do(): ท่อแตก [core/writer.c บรรทัดที่ 429] ระหว่าง GET [...]
OSError: ข้อผิดพลาดในการเขียน
SIGPIPE: เขียนไปยังท่อปิด/ซ็อกเก็ต/fd (อาจไคลเอ็นต์ตัดการเชื่อมต่อ) ตามคำขอ [...] !!!

ฉันได้กำหนดไว้แล้ว หมดเวลาซ็อกเก็ต, ซ็อกเก็ตส่งหมดเวลา และ socket-write-หมดเวลา ถึง 180 ในการกำหนดค่า uWSGI ไม่มีประโยชน์ nginx conf รวมถึง uwsgi_read_timeout 180 วินาที; และ uwsgi_buffering ปิด;

เอฟเฟ็กต์ส่วนใหญ่สามารถทำซ้ำได้ โดยเกิดขึ้นเกือบตลอดเวลา โดยเฉพาะอย่างยิ่งกับการตอบสนองจำนวนมาก แต่ไม่เคยเกิดขึ้นที่ออฟเซ็ตเดียวกัน การร้องขอซ้ำแล้วซ้ำเล่าอาจทำให้เสร็จสิ้นในที่สุด

Michael Hampton avatar
cz flag
ดูเหมือนว่าจะเป็นปัญหาการออกแบบแอปมากกว่า คำขอเว็บไม่ได้มีเจตนาให้นั่งรอการตอบกลับเป็นเวลาหลายนาที คุณควรเริ่มงานเบื้องหลังเพื่อสร้างไฟล์ ZIP จากนั้นให้ URL แก่ผู้ใช้ซึ่งพวกเขาสามารถตรวจสอบสถานะหรือรับไฟล์เมื่อดำเนินการเสร็จ
Felix avatar
gb flag
@MichaelHampton ไฟล์ถูกสร้างขึ้นทันที โดยทั่วไป ความล่าช้าในการตอบสนองจะน้อยกว่า 10 วินาที แต่การส่งเนื้อหาตอบกลับต้องใช้เวลา การเชื่อมต่อถูกยกเลิกในขณะที่การตอบกลับถูกส่งไปยังไคลเอนต์แล้ว ตัวแทนผู้ใช้รายงานความคืบหน้าในการดาวน์โหลดบางครั้ง 20% บางครั้ง 80% ซึ่งแตกต่างกันมาก จากนั้นข้อมูลจะหยุดไหลและในบางจุด ตัวแทนผู้ใช้จะรายงานการหมดเวลาขณะดาวน์โหลด
Michael Hampton avatar
cz flag
อืม. คุณควรตรวจสอบบันทึกข้อผิดพลาด nginx
Felix avatar
gb flag
ไม่มีอะไรในบันทึกข้อผิดพลาด nginx; บันทึกการเข้าถึงจะรายงานเฉพาะคำขอที่มีความยาวที่สั้นลง โดยไม่สนใจข้อเท็จจริงที่ว่าความยาวเนื้อหาแนะนำว่าการเชื่อมต่อถูกขัดจังหวะก่อนเวลาอันควร
Michael Hampton avatar
cz flag
ตกลง นี่เป็นคำถามที่น่าสนใจ คุณจะทราบความยาวของไฟล์บีบอัดได้อย่างไรก่อนที่คุณจะบีบอัด
Felix avatar
gb flag
ฉันไม่บีบอัดไฟล์ เนื่องจากโดยปกติแล้วไฟล์เหล่านี้จะถูกบีบอัดอยู่แล้ว (ส่วนใหญ่เป็นไฟล์ JPEG) ดังนั้น DEFLATE จะไม่เพิ่มพื้นที่มากนัก ไฟล์จะถูกจัดเก็บโดยไม่มีการบีบอัด ฉันได้รับรายการไฟล์ที่จะส่ง และจากขนาดไฟล์ ฉันจะคำนวณขนาดไฟล์ zip อย่างแม่นยำ ซึ่งรายงานเป็นความยาวของเนื้อหา จากนั้นไฟล์ ZIP จะถูกสร้างขึ้นในขณะที่ส่งไปยังไคลเอนต์ ฉันทดสอบสิ่งนี้หลายครั้ง และการคำนวณความยาวไม่ใช่ปัญหา
Score:0
ธง gb

ปรากฎว่าทั้งแอปพลิเคชันและ nginx ของฉันไม่ใช่ปัญหา แต่เป็นตัวกรองแพ็กเก็ตที่ผิดพลาดต่อหน้าทั้งคู่

โพสต์คำตอบ

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